TVP не возвращает набор записей - PullRequest
0 голосов
/ 10 мая 2018

Это первый раз, когда я пытаюсь использовать TVP для SQL Server.Я использую SQL Server 2016 Developer Edition.

Вот мой пользовательский тип и пример хранимой процедуры:

CREATE TYPE [dbo].[TranslateListOne] AS TABLE (TestOne INT)

CREATE PROCEDURE Translator_SaveTextToSQLOne 
    (@TranslatorListOne TranslateListOne READONLY)
AS
    SELECT * 
    FROM @TranslatorListOne

Для отладки я запускаю SQL Server Profiler.Вот вывод:

declare @p3 dbo.TranslateListOne
insert into @p3 values(5)
insert into @p3 values(3)

exec sp_executesql N'Translator_SaveTextToSQLOne',N'@TranslatorListOne [TranslateListOne] READONLY',@TranslatorListOne=@p3

Когда я запускаю SQL Server Profiler в новом окне запроса, он должен отобразить таблицу @TranslatorListOne.Ничего не выводится, и я тоже не получаю ошибку.Перед вызовом exec sp_executesql, если вы добавите

select * from @p3

Таблица заполнена правильно перед вызовом хранимой процедуры.Чего мне не хватает?

ОБНОВЛЕНО

Я использую asp.net для вызова хранимой процедуры.Чего мне не хватает в этом коде?Я не возвращаю записи, которые я отправляю.

Dim dbMain As New SqlConnection(GetConnection)
Dim rsReader As SqlDataReader
Dim cmd As New SqlCommand("Translator_SaveTextToSQLOne", dbMain)
Dim myTable As New DataTable
myTable.Columns.Add("TestOne", GetType(Integer))
myTable.Rows.Add(5)
myTable.Rows.Add(3)
Dim myParam As New SqlParameter("@TranslatorListOne", SqlDbType.Structured)
myParam.TypeName = "TranslateListOne"
myParam.Value = myTable
cmd.Parameters.Add(myParam)
dbMain.Open()
rsReader = cmd.ExecuteReader
While rsReader.Read
'Read the rows
End While

1 Ответ

0 голосов
/ 11 мая 2018

Если вы чем-то похожи на меня, то ударите себя по лбу через 3 ... 2 ... 1 ...:

Вам нужно добавить переменную в sp_execute_sql кактакже часть утверждения:

exec sp_executesql N'Translator_SaveTextToSQLOne @TranslatorListOne', 
                                          --     ^ This is missing ^
                   N'@TranslatorListOne [TranslateListOne] READONLY',
                   @TranslatorListOne=@p3

Мне потребовалось несколько поисков и несколько тестовых прогонов, чтобы наконец выяснить это ...

...