在SQL Server 2008中,我有包含CTE的存储过程
;with t1 as (select * from db..tablename where …)
Select * from t1;
我想使用tablename
作为存储过程参数之一。
请注意T1
的大小太大而无法使用
Exec(‘select * into #temptable from db..’+’tablename’+’ where …’)
有类似的问题和答案,但似乎都没有帮助。
由于
答案 0 :(得分:0)
我喜欢使用CTE。它们真是太棒了!
对于这个特殊问题,我建议不要反对。鉴于您正在将一个有价值数据的表“传输”到另一个存储过程中,我认为您应该稍微处理它。
考虑你的第一个过程:
IF OBJECT_ID('SomeTempTable') IS NOT NULL DROP SomeTempTable;
SELECT
*
INTO SomeTempTable
FROM
YourOtherTable
EXEC YourSecondProcedureName
请注意,您需要注意您想要的桌子范围。在您考虑之前,我没有包含工作代码。可以在此处找到更多信息:Temp Table Scope
另请注意,“YourSecondProcedureName”现在不会获取表值。相反(并且使用正确的范围)您可以通过名称调出临时表。尽管在sql server中有一些机制取决于可以为你做一些的版本,但它也被认为是完成后删除临时表的最佳实践。范围范围范围。
希望这有帮助!
马特