这是我第一次尝试将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