Требуется: удобный способ клонирования строк таблицы с помощью столбца с первичным ключом GUID. - PullRequest
1 голос
/ 22 августа 2011

Мне нужно клонировать строки таблицы, но я борюсь с этим синтаксисом. Мой ход мыслей пошел так:

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 ]

4 голосов
/ 22 августа 2011

Не заключайте ваши SELECT ed поля в скобки.

Попробуйте:

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 работает нормально.

2 голосов
/ 22 августа 2011
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
...