Sql server 将存储过程动态结果分配给表变量
我在SQL CLR程序集中有一个存储过程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
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是一个坏主意这一点,但还是要回答一下提示。老实说,我不喜欢前缀,因为前缀什么都不做,只会让它更难使用。但这是一种偏好。:)