powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / pass table to clr stored procedure
5 сообщений из 5, страница 1 из 1
pass table to clr stored procedure
    #39561750
mike909
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Еще один способ передачи таблицы в CLR-хранимую процедуру на C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[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;
}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
/*
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



Код: plaintext
1.
2.
3.
4.
5.
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)
...
Рейтинг: 0 / 0
pass table to clr stored procedure
    #39561792
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем не подошли временные таблицы ?
...
Рейтинг: 0 / 0
pass table to clr stored procedure
    #39561803
mike909
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один способ ...
А так же XML; StageTable и т.д. и т.п. ...
...
Рейтинг: 0 / 0
pass table to clr stored procedure
    #39561804
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое StageTable?
...
Рейтинг: 0 / 0
pass table to clr stored procedure
    #39561821
mike909
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cammomile,

Тоже что и временная, только обычная, про которую "знает" CLR-SP.
Свои записи CLR-SP получает select_ом по переданному ей ключу ...

PS. Наилучшим способом передачи "таблицы" является временные таблицы. Один минус - их надо предварительно заполнить ...
Ну и конечно, не глобальные времянки видны только в контекстном соединении -> не доступны асинхронные операции; MARS;
Впрочем, с курсором те же яйки (только в профиль).
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / pass table to clr stored procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]