2017-08-16 121 views
0

我試圖自動將多個插入到多個表中。使用動態sql在不同的表中自動插入

基本上,我有一個臨時表,客戶代碼和我添加了一個行號。我也有一個源表,其中包含客戶代碼和個人信息。現在我想將來自客戶1的人員ID插入#1,將來自客戶2的所有PersonID插入#2,等等。

我用這個代碼,但它會產生一個錯誤:

DECLARE @Customer_Code INT 
DECLARE @Row INT = 1 
DECLARE @SQL NVARCHAR (MAX) 


WHILE @Row = SELECT MAX(Rij) FROM #M 

BEGIN 
    SELECT @Customer_Code = Customer_Code FROM #M WHERE RowNr = @Row 

    SET @SQL = 

    'SELECT PersonID 
    INTO #@Customer_Code 
    FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = @Customer_Code' 

    EXECUTE (@SQL) 

    SET @Row = @Row + 1 
    SET @SQL = '' 
END 

任何人都可以請幫我在這裏。提前致謝。

PS。我使用MS SQL Server 2008的

的樣本數據:

L:Customer_Code和ROWNUMBER

1,1 2,2 3,3 4,4

在現實中,顯然Customer code!= RowNumber。

源表:列(Customer_Code是PersonID)

1, 8 , 
1, 9 , 
1, 10, 
1, 11, 
2, 9 , 
2, 12, 
2, 13, 
2, 14, 
3, 8 , 
3, 14, 
3, 15, 
3, 17, 
4, 8 , 
4, 10, 
4, 12, 
4, 14 

的結果應該是:

Table #1: 
PersonID 
8 
9 
10 
11 

Table #2 
PersonID 
9 
12 
13 
14 

Table #3 
PersonID 
8 
14 
15 
17 

Table #4 
PersonID 
8 
10 
12 
14 
+0

請編輯您的問題,將樣本數據包含爲DDL + DML(創建並插入語句)和期望的結果。 –

+0

看起來有點不盡如人意,不習慣這個編輯器。希望你能弄清楚我的意思。 –

+0

我不想弄清楚你的意思,我想複製並粘貼示例數據並準備好工作。 –

回答

1

您正在使用WHILE @Row。這不是一個布爾表達式,你可能正在尋找類似WHILE @ROW <= SELECT MAX(Rij) FROM #M的東西。

此外,您正在多次執行SELECT...INTO。第二次執行時,表#@Customer_Code已存在,因此您不能執行SELECT...INTO,而必須使用INSERT。最好事先定義表格。 編輯:我想你正在試圖爲每個Customer_Code做一個臨時表,在這種情況下,你應該正確追加變量。這同樣適用於AND Customer_Code = @Customer_Code',該變量作爲文字字符串追加,而不是其保存的值。 是獲取每一行中#M執行的查詢是:

SELECT PersonID 
    INTO #@Customer_Code 
    FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = @Customer_Code 

這顯然不是你的意圖。你需要的是:

'SELECT PersonID 
    INTO #'+ @Customer_Code + 
    'FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = '+ @Customer_Code 

在未來,如果您收到錯誤信息,你至少可以做的是告訴我們什麼錯誤消息實際上說的!

+0

好的,您是對的:消息105,級別15,狀態1,行18 字符串' \t AND Customer_Code = @Customer_Code'後未使用的引號。 –

+0

請參閱修改。 – HoneyBadger

+0

#m包含什麼 –