2011-08-22 28 views
1

我需要克隆錶行,但我正在努力與此語法。我的思路是這樣的:通緝:克隆表格行與GUID主鍵列整潔的方式

DECLARE @myPk Uniqueidentifier 
SET @myPK = NewID() 

INSERT INTO my.table (pk, fullname, two, three) 
SELECT (@myPK, "Clone of " + fullname , two, three) FROM my.table where pk= @pk 

但當然語法不正確。我也試着

INSERT INTO my.table (pk, fullname, two, three) 
SELECT (@myPK = newId(), "Clone of " + fullname , two, three) FROM my.table where pk= @pk  

(我希望你能看到我試圖去: - /)

簡短聲明變量對每個表列(不實際的,由於高的列數)或使用#tempTables(在這個代碼商店中不允許)是否有這樣一個整潔的語法?

感謝您的閱讀。

回答

4

不要用括號括您SELECT編輯的字段。

嘗試:

INSERT INTO my.table (pk, fullname, two, three) 
SELECT @myPK, 
     "Clone of " + fullname , 
     two, 
     three 
FROM my.table 
where pk= @pk 

當您在SELECT聲明用括號括一切引擎試圖使一個價值,這是不可能的。

例如,嘗試SELECT (1,2,3)這也會引發語法錯誤,而SELECT 1,2,3工作正常。

+0

**版主說明** _已將註釋清除,因爲它們退化成噪音。請保持建設性,專業性和話題性。 –

2
INSERT INTO my.table (pk, fullname, two, three) 
SELECT newid() as pk, ('Clone of ' + fullname) as fullname, two, three 
FROM my.table where pk= @pk 
+0

是的,也注意到了,謝謝。 – Zruty

+0

另外,我錯誤地認爲列名必須匹配,所以我的答案是冗餘的,並且對您的答覆 – Zruty

+2

@Ruty - 在INSERT語句的SELECT部分​​中,字段名稱無關緊要。 – JNK