0

嗨,我需要一个脚本,它根据 ID 从另一个表中更新表中的行,然后从第二个表中删除它复制的数据。

这是我的桌子

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

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

两张表之间的映射是一对一的。

目前我有更新表的脚本,但我不知道如何继续从文档表中删除值。这是我到目前为止所拥有的:

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

我会使用一个临时表来存储两个表中的匹配记录。之后,通过使用该临时表,您可以删除已在其他表中使用的数据。

如;

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 回答
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 回答