Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将重复条目插入SQL Server Management Studio_Sql_Sql Server_Stored Procedures - Fatal编程技术网

如何将重复条目插入SQL Server Management Studio

如何将重复条目插入SQL Server Management Studio,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我已经在网上搜索并尝试了以下解决方案,但它不起作用;它不会在表中输入行 INSERT INTO [CollisionBegin] SELECT '999-999-99999-9999-9999', [LocalNum], [version], [Submitted] FROM [CollisionBegin] WHERE [UniqueColID] = '2C024576-10BB-4A12-8B6E-BB03191866DE'; 我想做的是:在表中找到Uniqu

我已经在网上搜索并尝试了以下解决方案,但它不起作用;它不会在表中输入行

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,999-999-99999-9999-9999

上面的代码是我在web上找到的解决方案,但它对我不起作用,因为在存储过程中执行该语句后,什么也没有发生

这是我的存储过程:

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.
简言之,是的,我建议手动列出所有字段,但不,您不需要自己键入所有字段


如果您真的想在不列出所有字段的情况下执行此操作,那么您需要使用一些动态SQL或SQLCLR过程来实现它。这是可以做到的,而且应该是可行的,但对于某些事情来说,这要复杂得多,而用传统的方式编写查询可能是最好的解决方法。

只需尝试查询的选择部分即可。结果中是否有任何记录?是否有任何错误?如果有,错误是什么?另外:我总是在INSERT语句中指定完整的列列表:INSERT INTO MVCNew.dbo.CollisionBeginUniqueColID、LocalNum、Version、Submitted。。。。。。为了避免指定的列太少或太多,或者指定的顺序错误,我没有收到任何错误。如果我自己运行select语句,我会得到:没有列名999-999-9999-9999-9999,显示的其余字段来自UniqueColID='2C024576-10BB-4A12-8B6E-BB03191866DE',问题是为什么不将UniqueColID 999…插入UniqueColID?但是它从2C0中检索其余的列。。。unqiueColID@Nadal:是否您已经有一个条目具有999-999-99999-9999-9999-9999 UniqueColId,并且唯一约束设置为静默忽略重复项?您的[UniqueColId]是主键还是不允许重复项?Dominic,我不知道我是否100%理解了你说的话,但下面的代码是你的意思吗?插入[MVCNew].[dbo].[PrideMVCCollisionBegin]从[MVCNew].[dbo].[PrideMVCCollisionBegin]中选择*;更新[MVCNew].[dbo].[PrideMVCCollisionBegin]设置UniqueColID='999-999-9999-9999',其中UniqueColID='2C024576-10BB-4A12-8B6E-BB03191866DE';插入到[MVCNew].[dbo].[PrideMVCCollisionBegin]中,从[MVCNew].[dbo].[PrideMVCCollisionBegin]中选择*;我认为你在另一个线程上发布的内容只会插入一条记录,它不一定会使用WHERE…(WHERE…)插入重复项:抱歉,我没有写出最终查询在该线程中的外观。我刚刚编辑了这个答案。现在清楚了吗?