Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将存储过程动态结果分配给表变量_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 将存储过程动态结果分配给表变量

Sql server 将存储过程动态结果分配给表变量,sql-server,stored-procedures,Sql Server,Stored Procedures,我在SQL CLR程序集中有一个存储过程SP_a,SP_a返回一个动态的结果集:当没有错误(用C#捕获和处理)时,它返回字段F1,F2和F3,当有错误时,它返回字段F1,F2,F5和F6 我想创建一个存储过程SP_a_WRAP,它返回的结果集只包含F1和F2,下面是我所做的 CREATE PROCEDURE SP_A_WRAP ( @Param1 ) AS BEGIN DECLARE @RS TABLE (F1 NVARCHAR(MAX), F2 NVARCHAR(MAX), F3 NVARCH

我在SQL CLR程序集中有一个存储过程
SP_a
SP_a
返回一个动态的结果集:当没有错误(用C#捕获和处理)时,它返回字段
F1
F2
F3
,当有错误时,它返回字段
F1
F2
F5
F6

我想创建一个存储过程
SP_a_WRAP
,它返回的结果集只包含
F1
F2
,下面是我所做的

CREATE PROCEDURE SP_A_WRAP ( @Param1 )
AS
BEGIN
DECLARE @RS TABLE (F1 NVARCHAR(MAX), F2 NVARCHAR(MAX), F3 NVARCHAR(MAX), F5 NVARCHAR(MAX), F6 NVARCHAR(MAX))
INSERT INTO @RS (F1,F2) EXEC dbo.SP_A @Param1
SELECT * FROM @RS
END
在这两种情况下执行SP_A_WRAP都失败,错误为

提供的值的名称或列号与 表定义

在这两种情况下,执行SP_A都可以正常工作

使用
OPENROWSET
sp_executesql
不是一个选项


修改CLR程序集不是一个选项

错误很明显-存储过程返回不同的列数。列数必须与结果字段数匹配。这和在@RS(F1,F2)中写入
INSERT没有什么不同。选择1,2,4,5
是的,这对你不起作用。为了让你做到这一点,有些事情必须改变。也许它们只是你帖子中的名字,但前缀不是一个好计划@SeanLange只是名称,我将存储过程命名为SP_uux。。。函数FN_。。。类型TY。。。。等等,尽管希望你没有错过SP_u是一个坏主意这一点,但还是要回答一下提示。老实说,我不喜欢前缀,因为前缀什么都不做,只会让它更难使用。但这是一种偏好。:)