Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
mike909 Member Откуда: Сообщений: 662 |
Добрый день. Еще один способ передачи таблицы в 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 |
30 ноя 17, 09:31 [20994315] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Чем не подошли временные таблицы ? |
30 ноя 17, 10:37 [20994519] Ответить | Цитировать Сообщить модератору |
mike909 Member Откуда: Сообщений: 662 |
Еще один способ ... А так же XML; StageTable и т.д. и т.п. ... |
30 ноя 17, 10:58 [20994571] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Что такое StageTable? |
30 ноя 17, 11:00 [20994581] Ответить | Цитировать Сообщить модератору |
mike909 Member Откуда: Сообщений: 662 |
Cammomile, Тоже что и временная, только обычная, про которую "знает" CLR-SP. Свои записи CLR-SP получает select_ом по переданному ей ключу ... PS. Наилучшим способом передачи "таблицы" является временные таблицы. Один минус - их надо предварительно заполнить ... Ну и конечно, не глобальные времянки видны только в контекстном соединении -> не доступны асинхронные операции; MARS; Впрочем, с курсором те же яйки (только в профиль). |
30 ноя 17, 11:21 [20994663] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |