0

我不知道为什么这不起作用。

我正在使用动态 SQL

这是我生成 SQL 语句的方式:

OLD: SET @dSQL = 'DBCC CHECKIDENT([' + @TableName + '], RESEED, 0); SET IDENTITY_INSERT ' +                                                            @TableName + ' ON; INSERT INTO ' + @thisTable +  '(' + @pkcolumns + ', '+  @columns + ')' + ' SELECT (' + @pkcolumns + ', '+  @columns + ') FROM ' + @oldTable +' GROUP BY ' + @pkcolumns + '; SET IDENTITY_INSERT ' + @TableName + ' OFF;'

NEW: SET @dSQL = 'DBCC CHECKIDENT([' + @TableName + '], RESEED, 0); SET IDENTITY_INSERT ' + @TableName + ' ON; INSERT INTO ' + @thisTable +  @pkcolumns + ', '+  @columns  + ' SELECT DISTINCT(' + @pkcolumns + '), '+  @columns + ' FROM ' + @oldTable + '; SET IDENTITY_INSERT ' + @TableName + ' OFF;'

就像执行程序一样,变量是这样的。

@TableName DATA.HTI
@thisTable DATA.HTI
@oldTable [OR_JTU_2530].DATA.HTI

@columns [PARENT_HTI_ID], [OPERATION], [DISPLAY], [ACTIVE], [OFFSET]
@pkcolumns [HTI_ID]

@dSQL DBCC CHECKIDENT([DATA.HTI], RESEED, 0); SET IDENTITY_INSERT DATA.HTI ON; INSERT INTO DATA.HTI([HTI_ID], [PARENT_HTI_ID], [OPERATION], [DISPLAY], [ACTIVE], [OFFSET]) SELECT ([KPI_ID], [PARENT_KPI_ID], [OPERATION], [DISPLAY], [ACTIVE], [OFFSET]) FROM [OR_JTU_2530].DATA.HTI GROUP BY [HTI_ID]; SET IDENTITY_INSERT DATA.HTI OFF;

更新: 按删除分组,插入不同

4

2 回答 2

3

如果你打印出你的字符串,你会看到:

SELECT (' + @pkcolumns + ', '+  @columns + ') FROM

生成类似的东西:

SELECT (column1,column2,column3) FROM

这不是有效的语法。但是,一旦您解决了该问题(通过删除括号()),您仍然会遇到问题,因为您正在GROUP BY对.一个错误。@pkcolumns@columnsGROUP BY

于 2012-09-10T09:02:34.537 回答
1

根据您在上面发布的新代码,尝试以下操作,看看它是否有效:

SET @dSQL = 'DBCC CHECKIDENT([' + @TableName + '], RESEED, 0); 
SET IDENTITY_INSERT ' + @TableName + ' ON; INSERT INTO ' + @thisTable + '(' + @pkcolumns + ', ' + @columns + ') SELECT DISTINCT ' + @pkcolumns + ', ' +  @columns + ' FROM ' + @oldTable + ' 
SET IDENTITY_INSERT ' + @TableName + ' OFF;'
于 2012-09-10T10:35:24.880 回答