2017-09-04 85 views
0

公用表表達式我需要使用返回動態SQL一個CTE (Common Table Expression)TSQL,下面我嘗試不起作用:動態SQL在TSQL

注意:下面的查詢使用鏈接的服務器,但我的問題是關於 任何SQL甚至不使用openquery命令。

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

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

我怎樣才能讓這個動態SQL加載到我的CTE

+1

我不認爲你可以。你要求SQL選擇一些東西並同時執行一些東西。也許執行你的查詢到一個臨時表,然後從臨時表中選擇 – Greg

回答

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; 
+0

它看起來是一個很好的解決方案,我做到了,但是當我運行查詢時,它顯示「命令(s)成功完成」,但它不返回任何內容: /。有任何想法嗎? –

+1

臨時表定義是否完全匹配動態sql的輸出? –

+1

oww,我發現這個問題,是另一回事,非常抱歉,並感謝您的驚人幫助,我會設置您的答案是正確的。 –