我需要克隆表行,但我正在努力学习这种语法。我的思路是这样的:
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(此代码商店中不允许),是否有一个简洁的语法来执行此操作?
感谢阅读。
答案 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