2

UniqueColIDを検索し、結果をテーブルに挿入してレコードを複製しています。これにより、1つの列が重複しないようにし、その列がUniqueColIDである場合を除いて、重複するエントリが必要になります。

以下は私のコードです:

CREATE PROCEDURE [dbo].[InsertDuplicateFields] 
    (@UniqueColID varchar(50), @IndividualID varchar(50) = null)
AS
Begin           
    INSERT INTO TableCollisionBegin 
        SELECT * FROM TableCollisionBegin 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableCollisionDetails 
        SELECT * FROM TableCollisionDetails 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableCollisionLocation 
        SELECT * FROM TableCollisionLocation 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableDriver 
        SELECT * FROM TableDriver 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableFollowUp 
        SELECT * FROM TableFollowUp 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableOfficerLogs 
        SELECT * FROM TableOfficerLogs 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TablePolice 
        SELECT * FROM TablePolice 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableRecVerified 
        SELECT * FROM TableRecVerified 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableSignature 
        SELECT * FROM TableSignature 
        WHERE [IndividualID] = @IndividualID;

    INSERT INTO TableTrailer 
        SELECT * FROM TableTrailer 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableValidateLog 
        SELECT * FROM TableValidateLog 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableVehicle 
        SELECT * FROM TableVehicle 
        WHERE [UniqueColID] = @UniqueColID;

    INSERT INTO TableWitness 
        SELECT * FROM TableWitness 
        WHERE [UniqueColID] = @UniqueColID;


End

各テーブルには多数の列がありますが、それらはすべてUniqueColIDを共有しています。

複製を挿入するときに、すべての詳細を複製したいのですが、新しいUniqueColIDを挿入したいのですが、どうすればよいですか?

新しいUniqueColIDは、ASP.NETコードの特別なメソッドによって生成されます。2つまたは3つまたは4つの異なるUniqueColIDが必要で、残りの列は重複しています。

あなたが言ったコードの2番目のブロックを試しましたが、エラーが発生しました:

"Unknown object type 'TEMPORARY' used in a CREATE, DROP, or ALTER statement."





CREATE PROCEDURE [dbo].[AmendInsertDuplicateFields] (@UniqueColID varchar(50), @NewUniqueColID varchar(50)) 

AS 
Begin CREATE TEMPORARY TABLE Temp AS SELECT * FROM [MVCNew].[dbo].[CollisionBegin] WHERE [UniqueColID] = @UniqueColID; 

UPDATE Temp SET UniqueColID = @NewUniqueColID; 
INSERT INTO [MVCNew].[dbo].[CollisionBegin] SELECT * FROM Temp; 
DROP TEMPORARY TABLE IF EXISTS Temp; 
End

私はちょうど考えていました....いくつかのランダムなUniqueColID値で新しいレコードを挿入することは可能ですか?しかし、他のすべての列は値「o」または「u」または「いくつかのランダムテキスト」で挿入され、次にこれに挿入しますUniqueColIDを除くUniqueColIDのすべての列を新しいレコードにしますか?そうすれば、残りの列が同じ値を持つ新しいUniqueColIDができます。

KCD私はあなたのコードブロックの両方を試しましたが、どれも機能しませんでした.. :(

@NewUniqueColIDの値という名前の列がテーブルにないため、SELECT@NewUniqueColID....がどのように機能するかを個人的にはわかりません。

4

2 に答える 2

6

恐ろしいことのように思われますが、完全な列リストを指定するクエリを使用することをお勧めします。ただし、すべてのフィールドを自分で入力する必要はありません。SQLServer Management Studioを使用して、オブジェクトエクスプローラーでテーブルを右クリックし、メニュー項目[スクリプトテーブルとして|挿入先|新しいクエリウィンドウ]を選択します。

これにより、次のようなものが得られます。

INSERT INTO [dbo].[TableOfficerLogs]
           ([UniqueColID]
           ,[OtherField1]
           ,[OtherField2] -- etc.
           ,[OtherFieldN]
     VALUES
           (<UniqueColID, int,>
           ,<OtherField1, nvarchar(200),>
           ,<OtherField2, nvarchar(200),> --etc.
           ,<OtherFieldN, nvarchar(200),>)

これを怖がらせないでください。それでも、すべての値を手動で入力することはできません。次に、そのウィンドウを1秒間そのままにして、オブジェクトエクスプローラーに戻ります。同じテーブルのコンテキストメニューを使用して、別のスクリプトを取得します:「スクリプトテーブルとして| SELECTTo|新しいクエリウィンドウ」。これは完全に標準の選択リストであり、すべてのフィールドがリストされています。クエリ全体をコピーして、最初のクエリウィンドウのVALUES句に貼り付けます。

これにより、すべてのフィールドがリストされた完全なINSERT...SELECTクエリが得られます。ここで、必要に応じてSELECT部分​​のUniqueColIDを置き換えるだけです。

さらに、新しいUniqueColID値を事前に知っている場合は、FROM句でそれらに結合します(おそらく、これをすべてsprocで行う場合は、テーブル値パラメーターとして表されます)。必要に応じて、それぞれ指定したIDを使用します。

アップデート:

2つの「ScriptTableas」操作で得られるものは次のようなもので、すべてのフィールドがリストされています。

INSERT INTO [dbo].[TableOfficerLogs]
               ([UniqueColID]
               ,[OtherField1]
               ,[OtherField2] -- etc.
               ,[OtherFieldN]
SELECT [UniqueColID]
      ,[OtherField1]
      ,[OtherField2] -- etc.
      ,[OtherFieldN]

さて、実際にコピーを行うために、あなたはそれをいじくり回します。コードは次のようになります。

CREATE PROCEDURE [dbo].[InsertDuplicateFields]        
    (@UniqueColID varchar(50), @NewUniqueColID varchar(50))         
AS    

INSERT INTO [dbo].[TableOfficerLogs]
               ([UniqueColID]
               ,[OtherField1]
               ,[OtherField2] -- etc.
               ,[OtherFieldN]
SELECT @NewUniqueColID
      ,[OtherField1]
      ,[OtherField2] -- etc.
      ,[OtherFieldN]
WHERE UniqueColID = @UniqueColID

これにより、指定された行が複製され、古いIDが新しいIDに置き換えられます。もちろん、8つのテーブルごとにこのプロセスを繰り返します。

于 2012-06-07T15:01:55.747 に答える
1

アプリケーションが元のUniqueColIDを生成するので、新しいIDも渡すことをお勧めします。

CREATE PROCEDURE [dbo].[InsertDuplicateFields] 
    (@UniqueColID varchar(50), @NewUniqueColID varchar(50), @IndividualID varchar(50) = null)
AS
Begin           
    SELECT *
    INTO TempTable
    FROM TableCollisionBegin 
    WHERE [UniqueColID] = @UniqueColID

    UPDATE TempTable SET [UniqueColID] = @NewUniqueColID

    INSERT INTO TableCollisionBegin
        SELECT * 
        FROM TempTable

    DROP TABLE TempTable

    ...
End
于 2012-06-06T23:44:51.480 に答える