【发布时间】:2013-12-15 07:36:14
【问题描述】:
据我所知;我想做的事情在sql中是不可能的,但是值得请教各位。
假设我有一个返回列 Id 和 Value 的存储过程 abc。这个存储过程主要是其他部门出于功能原因使用的,我只会偶尔用它来做数据检查。
所以将它用作我的存储过程的一部分:
DECLARE @tABC TABLE
(
ID INT,
Value DECIMAL(12,2)
)
INSERT INTO @tABC
EXEC OtherDb.DataProd.abc
好的,现在这将完美运行,但是如果他们更改存储过程的结构怎么办?
在他们的存储过程中添加或删除一列会破坏我的代码,所以有没有办法让我的代码更灵活。
我最后一次绝望的尝试是这样的:
WITH tempTable AS
(
EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable
显然失败得很惨。
【问题讨论】:
-
这就是为什么你应该使用表值函数或表变量而不是存储过程来返回表。无论如何,OPENROWSET 可能是您的解决方案
-
@adrianm 您对 UDF 的评论实际上解决了我的问题。我不敢相信我以前没有看到过。
-
无论你的代码多么动态,如果他们删除你使用的列,你的代码就会被破坏。不要因为糟糕的变更控制而给您的流程增加不必要的开销。我做了很多动态代码,但从来没有因为变更控制不佳
标签: sql sql-server tsql stored-procedures