我正在编写一个存储过程(SQL Server),它接收代表其他存储过程名称的字符串参数。这个字符串还包含所有存储的参数,所以为了运行它,我只需要编写EXEC @vSpCommand
.
现在我的问题来了:我的程序应该能够处理通用的 SP,所以我不知道结果表会是什么样子。这意味着我不知道该表将有多少列,以及每列的类型。
此外,在给定的 SP ( @vSpCommand
) 内,可能还有另一个对其他存储的动态调用。因此使用OPENROWSET
将不起作用。我尝试了以下方法:
SET @vSpCommand = REPLACE(@vSpCommand,'''','''''')
SET @vCmd = 'IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[TA_SpTable'+@vExecId+']'') AND type in (N''U''))
DROP TABLE TA_SpTable'+@vExecId+' SELECT * INTO TA_SpTable'+ @vExecId+' FROM OPENROWSET(''SQLOLEDB'', ''Server=SERVERNAME,3180;Trusted_Connection=Yes'',
''EXEC '+@vSpCommand+ ''')'
EXEC (@vCmd)
没有任何成功。
问题是如何将这个 SP 的结果插入到表中?
除非不可能,否则在 SQL 中首选解决方案,否则使用 .NET CLR 也是一种选择。