我正在尝试将多个插入自动化到多个表中。
基本上,我有一个临时表,带有客户代码,我添加了一个行号。我还有一个源表,其中包含客户代码和个人信息。现在我想将来自客户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。
示例数据:
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
答案 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
将来,如果收到错误消息,您可以做的最少就是告诉我们错误消息实际上是什么!