Ran*_*all 8 sql-server stored-procedures table-valued-parameters
是否有可能,如果是这样,如何使用SQL EXEC将数据传递给存储函数的表值参数?
我知道如何从C#传递数据.使用表值参数的四个存储过程之一不会产生预期结果.我想从SQL服务器管理工作室执行我的proc以进行调试,但是如果这样的语法存在,我无法找到正确的语法.我没有在文档中找到任何相关内容.
我的类型表:
CREATE TYPE [MyNameSpace].[MyTypeTable] AS TABLE(
//... all my fields
)
Run Code Online (Sandbox Code Playgroud)
我的存储过程:
//... 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
Run Code Online (Sandbox Code Playgroud)
我试过了:
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;
Run Code Online (Sandbox Code Playgroud)
抛出:
操作数类型冲突:nvarchar与MyTypeTable不兼容
Dam*_*ver 12
您不能使用临时表 - 您必须使用表变量:
declare @t [MyNameSpace].[MyTypeTable]
insert into @t (/*columns*/) values
(/* first row */),
(/* second row */)
EXECUTE MyNameSpace.MyStoredProc @MyTypeTableVar = @t;
Run Code Online (Sandbox Code Playgroud)
(您可以使用INSERT ... VALUES上面所示填充它,或者INSERT ... SELECT如果您有一个包含您关注的数据的现有表)
小智 5
这是一个工作示例:
-- 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4869 次 |
| 最近记录: |