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"

これにより、これを持つ行に対応するすべての列が取得されますUniqueColID。ここで、このレコードを再挿入しますが、NEW 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 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 に答える