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

Using dynamic sql to automate inserts in different tables

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

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

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

实际上,显然是Customer code != RowNumber.

来源Table:列(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

您正在使用 WHILE @Row。这不是布尔表达式,您可能正在寻找类似 WHILE @ROW <= SELECT MAX(Rij) FROM #M 的内容。

此外,您正在多次执行 SELECT...INTO。第二次执行时,table #@Customer_Code 已经存在,因此您不能执行 SELECT...INTO 而是必须使用 INSERT。最好事先定义 table 。 edit: 我想你正在尝试为每个 Customer_Code 创建一个临时的 table,在这种情况下你应该正确地附加变量。 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

以后,如果您收到错误消息,您至少可以告诉我们错误消息的实际内容!