Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

pass table to clr stored procedure

$
0
0
Добрый день.

Еще один способ передачи таблицы в CLR-хранимую процедуру на C#
[SqlProcedure]
public static int STest([SqlFacet(MaxSize = -1)] SqlString stmt)
{
  using (SqlConnection con = new SqlConnection("context connection = true"))
  {
    con.Open();
    using (SqlCommand cmd = new SqlCommand(stmt.Value, con))
    {
      using (SqlDataReader dr = cmd.ExecuteReader())
      {
        SqlContext.Pipe.Send(dr);
      }
    }
  }

  return 0;
}


/*
CREATE ASSEMBLY [STest]
FROM '...\BlaBlaBla.dll'
WITH PERMISSION_SET = SAFE

GO

CREATE PROCEDURE [dbo].[STest] @stmt nvarchar(max)
WITH EXECUTE AS CALLER
AS EXTERNAL NAME [STest].[StoredProcedures].[STest]

GO
*/
declare @handle int
      , @stmt nvarchar(max)

-- Fake_овая таблица, исключительно для подавления выхлопа sp_cursoropen
declare @t table(val nvarchar)

insert into @t
exec sp_cursoropen @handle OUT, 'select @@version as [ver]', 2, 8193

set @stmt = 'exec sp_cursorfetch ' + cast(@handle as sysname) + ', 2, 0, 100000'

exec [dbo].[STest] @stmt

exec sp_cursorclose @handle


ver
Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64)
Mar 6 2017 14:18:16
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows 10 Enterprise 6.3 <X64> (Build 14393: ) (Hypervisor)

Viewing all articles
Browse latest Browse all 7251

Trending Articles