将测试数据传递给 SQL 内的 table 值参数
Pass test data to table-valued parameter within SQL
是否有可能,如果可以,如何使用 SQL EXEC 将数据传递给存储函数的 table 值参数?
我知道如何从 C# 传入数据。我使用 table 值参数的四个存储过程之一没有产生预期的结果。我想从 SQL server management studio 执行我的 proc 以进行调试,但我无法找到正确的语法来执行此操作,如果这样的语法存在的话。我没有在文档中找到任何相关内容。
我的类型table:
CREATE TYPE [MyNameSpace].[MyTypeTable] AS TABLE(
//... all my fields
)
我的存储过程:
//... bunch of stuff
ALTER PROCEDURE [MyNameSpace].[MyStoredProc]
@MyTypeTableVar MyTypeTable READONLY
AS
BEGIN
//Do a bunch of stuff
//Want to test the stuff in here
END
我试过:
IF OBJECT_ID('tempdb.dbo.#MyTempTable') IS NOT NULL DROP TABLE tempdb.dbo.#MyTempTable;
select top 0 *
into #MyTempTable
//existing table with structure that matches the table-valued param
from MyNameSpace.MyTable;
//...Long insert statement assigning test data to #MyTempTable
EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = #MyTempTable;
抛出:
Operand type clash: nvarchar is incompatible with MyTypeTable
您不能使用临时 table - 您必须使用 table variable:
declare @t [MyNameSpace].[MyTypeTable]
insert into @t (/*columns*/) values
(/* first row */),
(/* second row */)
EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = @t;
(您可以使用如上所示的 INSERT ... VALUES
或 INSERT ... SELECT
填充它,如果您有包含您关心的数据的现有 table)
这是一个工作示例:
-- Declare a table parameter
DECLARE @registryUpdates AS typ_KeyValuePairStringTable;
-- Insert one row
INSERT INTO @registryUpdates
VALUES ('Hello', 'World');
-- Call Stored Procedure
EXEC prc_UpdateRegistry @registryUpdates
是否有可能,如果可以,如何使用 SQL EXEC 将数据传递给存储函数的 table 值参数?
我知道如何从 C# 传入数据。我使用 table 值参数的四个存储过程之一没有产生预期的结果。我想从 SQL server management studio 执行我的 proc 以进行调试,但我无法找到正确的语法来执行此操作,如果这样的语法存在的话。我没有在文档中找到任何相关内容。
我的类型table:
CREATE TYPE [MyNameSpace].[MyTypeTable] AS TABLE(
//... all my fields
)
我的存储过程:
//... bunch of stuff
ALTER PROCEDURE [MyNameSpace].[MyStoredProc]
@MyTypeTableVar MyTypeTable READONLY
AS
BEGIN
//Do a bunch of stuff
//Want to test the stuff in here
END
我试过:
IF OBJECT_ID('tempdb.dbo.#MyTempTable') IS NOT NULL DROP TABLE tempdb.dbo.#MyTempTable;
select top 0 *
into #MyTempTable
//existing table with structure that matches the table-valued param
from MyNameSpace.MyTable;
//...Long insert statement assigning test data to #MyTempTable
EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = #MyTempTable;
抛出:
Operand type clash: nvarchar is incompatible with MyTypeTable
您不能使用临时 table - 您必须使用 table variable:
declare @t [MyNameSpace].[MyTypeTable]
insert into @t (/*columns*/) values
(/* first row */),
(/* second row */)
EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = @t;
(您可以使用如上所示的 INSERT ... VALUES
或 INSERT ... SELECT
填充它,如果您有包含您关心的数据的现有 table)
这是一个工作示例:
-- Declare a table parameter
DECLARE @registryUpdates AS typ_KeyValuePairStringTable;
-- Insert one row
INSERT INTO @registryUpdates
VALUES ('Hello', 'World');
-- Call Stored Procedure
EXEC prc_UpdateRegistry @registryUpdates