Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 CTE和tablename作为参数_Sql Server 2008_Tsql_Stored Procedures_Common Table Expression - Fatal编程技术网

Sql server 2008 CTE和tablename作为参数

Sql server 2008 CTE和tablename作为参数,sql-server-2008,tsql,stored-procedures,common-table-expression,Sql Server 2008,Tsql,Stored Procedures,Common Table Expression,在SQLServer2008中,我有一个包含CTE的存储过程 ;with t1 as (select * from db..tablename where …) Select * from t1; 我想使用tablename作为存储过程参数之一 请注意,T1的大小太大,无法使用 Exec(‘select * into #temptable from db..’+’tablename’+’ where …’) 也有类似的问题和答案,但似乎都没有帮助 谢谢我喜欢使用CTE。它们真是个好工具 对于

在SQLServer2008中,我有一个包含CTE的存储过程

;with t1 as (select * from db..tablename where …)
Select * from t1;
我想使用tablename作为存储过程参数之一

请注意,T1的大小太大,无法使用

Exec(‘select * into #temptable from db..’+’tablename’+’ where …’)
也有类似的问题和答案,但似乎都没有帮助


谢谢

我喜欢使用CTE。它们真是个好工具

对于这个特殊的问题,我建议你反对。考虑到您正在将一个表的数据传输到另一个存储进程,我认为您应该以不同的方式处理它

考虑您的第一个过程:

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

SELECT
    *
INTO SomeTempTable
FROM
YourOtherTable

EXEC YourSecondProcedureName
请注意,您需要注意您想要的桌子范围。在您考虑之前,我没有包含工作代码。更多信息可在此处找到:

还要注意,YourSecondProcedureName现在不接受表值。相反,在正确的范围内,您只需按名称从临时表中调用。虽然SQLServer中有一些机制可以为您完成某些操作,但在完成时删除临时表也是最佳做法,具体取决于版本。再次强调范围

希望这有帮助


马特

你能详细解释一下吗?请注意,T1的大小太大,无法使用Exec'select*之类的东西从db转换为诱惑..'+'tablename'+'其中..'为什么它们似乎没有帮助?'?。将表名作为参数传入。检查它是否为表名,最好是与之一起使用的表名,然后使用表名而不是参数构建一些sql并执行它。这很痛苦,因为您应该尽最大努力避免这样做……第一个子查询T1的数据集相当大。如果不是这样的话,我会将t1的输出发送到临时表中。有人否决了这个问题,觉得没有必要解释它。它只是告诉我他/她是什么类型的人。