使用动态sql在不同的表中自动插入
我试图自动将多个插入到多个表中。使用动态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
您正在使用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
在未来,如果您收到错误信息,你至少可以做的是告诉我们什么错误消息实际上说的!
好的,您是对的:消息105,级别15,状态1,行18 字符串' \t AND Customer_Code = @Customer_Code'后未使用的引号。 –
请参阅修改。 – HoneyBadger
#m包含什么 –
请编辑您的问题,将样本数据包含为DDL + DML(创建并插入语句)和期望的结果。 –
看起来有点不尽如人意,不习惯这个编辑器。希望你能弄清楚我的意思。 –
我不想弄清楚你的意思,我想复制并粘贴示例数据并准备好工作。 –