2012-09-10 46 views
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; 

UPDATE: 集團通過刪除,插入不同

回答

3

如果你打印出你的字符串,你會看到這個:

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

生成類似:

SELECT (column1,column2,column3) FROM 

這是無效的語法。但是,一旦解決了問題(通過刪除()括號),您仍然會遇到問題,因爲您在@pkcolumns上執行GROUP BY,但@columns列不包含在GROUP BY或任何聚合中,所以你仍然會得到一個錯誤。

+0

其實能把我這樣的選擇([列1]的東西,[列2],[欄3] )從,但你是正確的與小組通過我改變它disctinct並刪除(),只剩下它不同的 – Matthias

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;' 
+0

沒有工作。 = /相同的錯誤... – Matthias

+0

是否有可能您可以在此發佈爲@dSQL生成的SQL語句?這將幫助我們快速找到問題... –