0

こんにちは、ID に基づいて別のテーブルからテーブルの行を更新し、その後、コピーしたデータを 2 番目のテーブルから削除するスクリプトが必要です。

これは私が持っているテーブルです

Documents
--------
DocumentID(PK)
RealFileName
FileName

ImageDocuments
--------------
ImageDocumentId(PK)
DocumentId(FK)
OriginalFileName
StorageFileName

2 つのテーブル間のマッピングは 1 対 1 です。

現時点では、テーブルを更新するスクリプトがありますが、ドキュメント テーブルから値を削除する方法がわかりません。

UPDATE [dbo].[ImageDocuments]
SET [dbo].[ImageDocuments].[OriginalFileName] = d.FileName,
    [dbo].[ImageDocuments].[StorageFileName] = d.RealName
FROM [dbo].[ImageDocuments] as fu, 
     [dbo].[Documents] as d
WHERE fu.DocumentID = d.DocumentID

ImageDocuments テーブルに追加された行をドキュメント テーブルから削除するにはどうすればよいですか?

更新 削除クエリを作成しますが、これが正しく機能するかどうかは誰でも検証できます:

DELETE [dbo].[Documents]
FROM [dbo].[ImageDocuments] as fu
INNER JOIN [dbo].[Documents] as d ON d.DocumentID = fu.DocumentID
4

3 に答える 3

1

これを使って:

UPDATE [dbo].[ImageDocuments]
SET [dbo].[ImageDocuments].[OriginalFileName] = d.FileName,
    [dbo].[ImageDocuments].[StorageFileName] = d.RealName
OUTPUT INSERTED.ImageDocumentId
INTO @Ids
FROM [dbo].[ImageDocuments] as fu, 
     [dbo].[Documents] as d
WHERE fu.DocumentID = d.DocumentID;

DELETE FROM Documents
WHERE DocumentID IN (SELECT ImageDocumentId FROM @IDs);
于 2013-09-16T08:53:55.507 に答える
0

これはうまくいくはずだと思います。

ImageDocuments のすべての行を既にコピーしたので、Documents のすべての DocumentID を安全に削除できます。

    UPDATE [dbo].[ImageDocuments]
    SET [dbo].[ImageDocuments].[OriginalFileName] = d.FileName,
        [dbo].[ImageDocuments].[StorageFileName] = d.RealName
    FROM [dbo].[ImageDocuments] as fu, 
         [dbo].[Documents] as d
    WHERE fu.DocumentID = d.DocumentID;

    Delete From Documents where Documents.DocumentID in 
(Select ImageDocuments.DocumentID from ImageDocuments);
于 2013-09-16T08:54:27.263 に答える
0

一時テーブルを使用して、一致するレコードを両方のテーブルに格納します。その後、その一時テーブルを使用して、他のテーブルで既に使用したデータを削除できます。

そのような;

DECLARE @Table TABLE (MatchingId INT)
INSERT INTO @Table 
SELECT DocumentID FROM [ImageDocuments] ImgDoc 
INNER JOIN [Documents] doc 
    ON ImgDoc.DocumentID = doc.DocumentID

UPDATE [dbo].[ImageDocuments]
SET [dbo].[ImageDocuments].[OriginalFileName] = d.FileName,
    [dbo].[ImageDocuments].[StorageFileName] = d.RealName
FROM [dbo].[ImageDocuments] as fu, 
     [dbo].[Documents] as d
WHERE fu.DocumentID = d.DocumentID

DELETE FROM DocumentID WHERE DocumentID IN 
(SELECT DocumentID FROM @Table )
于 2013-09-16T08:58:26.137 に答える