通缉:使用GUID主键列克隆表行的一种巧妙方法

时间:2011-08-22 15:25:30

标签: tsql sql-server-2008 replication

我需要克隆表行,但我正在努力学习这种语法。我的思路是这样的:

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(此代码商店中不允许),是否有一个简洁的语法来执行此操作?

感谢阅读。

2 个答案:

答案 0 :(得分: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工作正常。

答案 1 :(得分: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