1

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

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"

这应该检索与 this 对应的行的所有列UniqueColID。现在我想用NEW 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 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.
4

1 回答 1

0

在您关于同一主题的其他线程上查看我的回答。简而言之,是的,我建议手动列出所有字段,但是不,您不需要自己全部输入。

如果您真的有动力在不列出所有字段的情况下执行此操作,那么您需要使用一些动态 SQL(或者说,SQLCLR 过程)来实现它。它可以完成,并且应该可以工作,但是对于真正可能通过以传统方式编写查询来最好解决的问题来说,它要复杂得多。

于 2012-06-07T15:10:15.130 回答