我有一个我想修改的SQL声明。就目前而言,我正在运行一个简单的选择,但我想修改它,因此仅将目标表中不存在的记录(由我的标准确定)。

这是我的最初声明:

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())  

我想更改内容,以便只有在选票不存在时才能填充分期。这是一种可以接受的方法,还是有更好的选择?

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
    AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)) )
有帮助吗?

解决方案

您的技术看起来不错,除了 选择...进入 语法用于创建全新的表格。相反,您需要使用以下代码将行添加到现有表:

INSERT INTO StagingTable
    (BallotID, MeetingDate)
    SELECT b.BallotID, m.MeetingDate
        FROM Ballot b
            INNER JOIN Meeting m
                on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' 
            AND (b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
            AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)

其他提示

SELECT INTO 创建一个新表,而不是将数据插入现有表中。因此,我将检查表是否存在,然后在运行现有SQL之前将表放置。将确保每次丢弃并重新创建分期台。

    IF OBJECT_ID('StagingTable','U') IS NOT NULL
    BEGIN
         DROP TABLE StagingTable
    END


        SELECT b.BallotID, m.MeetingDate
        INTO StagingTable
        FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' 
        AND m.MeetingDate < GETDATE()) 

如果要在现有表中添加行,则应使用 INSERT INTO 根据Joe Stefanelli的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top