我在线搜索并尝试了以下解决方案,但它不起作用;它没有在表格中输入一行..
INSERT INTO [CollisionBegin]
SELECT '999-999-99999-9999-9999', [LocalNum], [version], [Submitted]
FROM [CollisionBegin]
WHERE [UniqueColID] = '2C024576-10BB-4A12-8B6E-BB03191866DE';
我要做的是:在UniqueColdID="2C024576-10BB-4A12-8B6E-BB03191866DE"
这应检索与此UniqueColID
行对应的所有列。现在我想重新插入此记录但是新 UniqueColID, "999-999-99999-9999-9999"
。
上面的代码是我在网络上找到的解决方案,但它对我不起作用,因为在我的存储过程中执行该语句后,没有任何反应。
这是我的存储过程:
ALTER PROCEDURE [dbo].[AmendInsertDuplicateFields]
AS
BEGIN
INSERT INTO [MVCNew].[dbo].[CollisionBegin]
SELECT
'999-999-99999-9999-9999', [LocalNum], [version], [Submitted]
FROM
[MVCNew].[dbo].[CollisionBegin]
WHERE
[UniqueColID] = '2C024576-10BB-4A12-8B6E-BB03191866DE';
END
我知道我必须明确地向insert提供值:
INSERT INTO [MVCNew].[dbo].[CollisionBegin] (Column1, Column2, Column3, etc)
SELECT Column1, Column2, Column3, etc
FROM...
但我有大约8个表需要这样做,每个表有30个列,这样会让人感到困惑..
我刚试过:
CREATE TEMPORARY TABLE chan2 ENGINE=MEMORY SELECT * FROM [MVCNew].[dbo].[PrideMVCCollisionBegin] WHERE UniqueColID='2C024576-10BB-4A12-8B6E-BB03191866DE';
UPDATE chan2 SET UniqueColID='999-999-99999-9999-9999';
INSERT INTO [MVCNew].[dbo].[PrideMVCCollisionBegin] SELECT * FROM chan2;
DROP TABLE chan2;
但我收到错误:
Unknown object type 'TEMPORARY' used in a CREATE, DROP, or ALTER statement.
答案 0 :(得分:0)
在your other thread on this same topic.上查看我的回答简而言之,是的,我建议您手动列出所有字段,但不,您不需要自己输入所有字段。
如果你真的有动力在没有列出所有字段的情况下这样做,你需要进入一些动态SQL(或者说,一个SQLCLR程序)来实现它。它可以完成,它应该可以工作,但对于那些通过传统方式编写查询可能最好解决的问题来说要复杂得多。