2013-10-16 29 views
1

我遇到了一個問題。即時通訊嘗試通過CTE代碼上的多個數據庫使用while循環。 我收到以下錯誤消息CTE QUERY上的Microsoft SQLServer LOOP

102, Level 15, State 1, Line 4 Incorrect syntax near ';'. 

當前的代碼我現在用我的所有查詢被粘貼下面...任何幫助將是巨大的對我如何可以通過多個數據庫循環。謝謝。

USE WSA 
delete from TEST 
GO 
DECLARE @Database varchar(20), @i int 
SELECT @i = 0 

WHILE @i < 6  
BEGIN  
if @i = 0 SELECT @Database = 'Hs_Active'  
if @i = 1 SELECT @Database = 'Ge_Active'  
if @i = 2 SELECT @Database = 'At_Active' 
if @i = 3 SELECT @Database = 'LW_Active'  
if @i = 4 SELECT @Database = 'SE_Active'  
if @i = 5 SELECT @Database = 'LL_Active'  

execute(  
'USE '[email protected] +'  
insert into WSA.dbo.TEST  


;WITH  
Credit AS 
( SELECT PTNO,CD,AMT,DESCRIPTION,  
ROW_NUMBER()OVER(PARTITION BY PTNO,CD ORDER BY BatchSeqID) AS Sort  
FROM dbo.DTLPAYMENTS 
WHERE AMT < 0),  

Debit AS  
( SELECT PTNO,CD,AMT,DESCRIPTION,  
ROW_NUMBER()OVER(PARTITION BY PTNO,CD ORDER BY BatchSeqID) AS Sort 
FROM dbo.DTLPAYMENTS  
WHERE AMT > 0)  

SELECT ISNULL(c.PTNO,d.PTNO) AS PTNO,  
    ISNULL(c.CD,d.CD) AS CD, 
    --Credit data  
    c.AMT AS CRAMT,  
    c.DESCRIPTION AS CRDESCRIPTION,  
    --Debit data  
    d.AMT AS DBTAMT,  
    d.DESCRIPTION AS DBTDESCRIPTION  
FROM Credit c 
FULL JOIN Debit d 
ON d.PTNO = c.PTNO 
AND d.CD = c.CD 
AND d.Sort= c.Sort   


')  
SELECT @[email protected]+1  
    END  
+2

你的錯誤最可能的原因是你使用的是與關鍵字在插入查詢中。 –

回答

0

我認爲你的問題是在CTE定義之前INSERT的定位。嘗試後像移動它:

USE WSA 
delete from TEST 
GO 
DECLARE @Database varchar(20), @i int 
SELECT @i = 0 

WHILE @i < 6  
BEGIN  
if @i = 0 SELECT @Database = 'Hs_Active'  
if @i = 1 SELECT @Database = 'Ge_Active'  
if @i = 2 SELECT @Database = 'At_Active' 
if @i = 3 SELECT @Database = 'LW_Active'  
if @i = 4 SELECT @Database = 'SE_Active'  
if @i = 5 SELECT @Database = 'LL_Active'  

execute(  
'USE '[email protected] +'  
GO  


;WITH  
Credit AS 
( SELECT PTNO,CD,AMT,DESCRIPTION,  
ROW_NUMBER()OVER(PARTITION BY PTNO,CD ORDER BY BatchSeqID) AS Sort  
FROM dbo.DTLPAYMENTS 
WHERE AMT < 0),  

Debit AS  
( SELECT PTNO,CD,AMT,DESCRIPTION,  
ROW_NUMBER()OVER(PARTITION BY PTNO,CD ORDER BY BatchSeqID) AS Sort 
FROM dbo.DTLPAYMENTS  
WHERE AMT > 0)  
insert into WSA.dbo.TEST 
SELECT ISNULL(c.PTNO,d.PTNO) AS PTNO,  
    ISNULL(c.CD,d.CD) AS CD, 
    --Credit data  
    c.AMT AS CRAMT,  
    c.DESCRIPTION AS CRDESCRIPTION,  
    --Debit data  
    d.AMT AS DBTAMT,  
    d.DESCRIPTION AS DBTDESCRIPTION  
FROM Credit c 
FULL JOIN Debit d 
ON d.PTNO = c.PTNO 
AND d.CD = c.CD 
AND d.Sort= c.Sort   


')  
SELECT @[email protected]+1  
    END  

編輯 - 哦,你使用USE關鍵字交換數據庫後需要一個GO - 補充說太