首页 文章

将测试数据传递给SQL中的表值参数

提问于
浏览
4

是否有可能,如果是这样,如何使用SQL EXEC将数据传递给存储函数的表值参数?

我知道如何从C#传递数据 . 使用表值参数的四个存储过程之一不会产生预期结果 . 我想从SQL服务器管理工作室执行我的proc以进行调试,但是如果这样的语法存在,我无法找到正确的语法 . 我没有在文档中找到任何相关内容 .

我的类型表:

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;

抛出:

操作数类型冲突:nvarchar与MyTypeTable不兼容

2 回答

  • 1

    你不能使用临时表 - 你必须使用table variable

    declare @t [MyNameSpace].[MyTypeTable]
    insert into @t (/*columns*/) values
    (/* first row */),
    (/* second row */)
    
    EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = @t;
    

    (您可以使用 INSERT ... VALUES 填充它,如上所示,如果您有一个包含您关注的数据的现有表,则可以填充 INSERT ... SELECT

  • 6

    这是一个有效的例子:

    -- 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
    

相关问题