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が、@columns列はGROUP 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 に答える