使用动态sql自动化不同表中的插入

时间:2017-08-16 09:18:15

标签: sql sql-server sql-insert dynamic-sql

我正在尝试将多个插入自动化到多个表中。

基本上,我有一个临时表,带有客户代码,我添加了一个行号。我还有一个源表,其中包含客户代码和个人信息。现在我想将来自客户1的人员ID插入#1,将所有PersonID从客户2插入#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。

示例数据:

M:Customer_Code AND RowNumber

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

实际上,显然是客户代码!= RowNumber。

源表:COLUMNS(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

1 个答案:

答案 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

将来,如果收到错误消息,您可以做的最少就是告诉我们错误消息实际上是什么!