CTE和tablename作为参数

时间:2013-01-28 18:04:33

标签: sql-server-2008 tsql stored-procedures common-table-expression

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

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

由于

1 个答案:

答案 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中有一些机制取决于可以为你做一些的版本,但它也被认为是完成后删除临时表的最佳实践。范围范围范围。

希望这有帮助!

马特