0

在 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 …’)

有类似的问题和答案,但似乎都没有帮助。

谢谢

4

1 回答 1

0

我喜欢使用 CTE。它们是一个很棒的实用工具!

对于这个特殊问题,我可能会建议反对它。鉴于您正在将一个表的数据“传输”到另一个存储过程,我认为您应该以不同的方式处理它。

考虑你的第一个过程:

IF OBJECT_ID('SomeTempTable') IS NOT NULL DROP SomeTempTable;

SELECT
    *
INTO SomeTempTable
FROM
YourOtherTable

EXEC YourSecondProcedureName

请注意,您需要注意表格的范围。在您考虑之前,我没有包含工作代码。更多信息可以在这里找到:临时表范围

另请注意,“YourSecondProcedureName”现在不采用表值。相反(并且在正确的范围内),您只需按名称调用您的临时表。它也被认为是完成后删除临时表的最佳实践,尽管 sql server 中有一些机制取决于版本可以为你做一些。再次范围范围范围。

希望这可以帮助!

马特

于 2013-01-28T19:04:58.513 回答