TSQL中公用表表达式中的动态SQL

时间:2017-09-04 02:30:28

标签: sql-server tsql

我需要使用SQL中的CTE (Common Table Expression)返回动态TSQL,我的尝试不起作用:

  

注意:下面的查询使用链接服务器,但我的问题是相关的   甚至不使用openquery命令的任何SQL。

declare @sql nvarchar(max) = N'SELECT * FROM OPENQUERY(DATABASE1, ''SELECT * FROM tblRequisitions'')'

;WITH requisitions AS
(
   EXEC (@sql)
)
SELECT * from requisitions

如何将此动态SQL加载到我的CTE

1 个答案:

答案 0 :(得分:2)

你不能将动态sql合并到常规的sql中。您可以做的是创建临时表,将动态输出插入临时表,然后引用CTE中的临时表。这些方面的东西......

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
DROP TABLE #temp;

CREATE TABLE #temp (
    -- ColumnName DataType
    );
INSERT #temp (ColumnName)
EXEC (@sql);

WITH
    cte_requisitions AS (
        SELECT 
            *
        FROM 
            #temp t
        )
SELECT 
    *
FROM 
    cte_requisitions r;