Используя табличную переменную в существует оператор

Я слышал, что подкаст брал интервью у miguel de icaza (моно вывод), возможно, несколько недель назад, так, чтобы была, возможно, середина декабря 2008, и он сказал, что у них еще не было поддержки WPF вообще.

11
задан womp 30 September 2009 в 16:43
поделиться

3 ответа

Это будет работать:

[@BugRep].BUGCODE

Кстати, вам также потребуется изменить «b.CODE» на «b.BUGCODE»;)

13
ответ дан 3 December 2019 в 05:35
поделиться

Это на самом деле очень разборчивый. Ознакомьтесь со встроенными комментариями ниже, используя предложение womp, а также попробуйте LEFT OUTER JOIN.

CREATE TABLE Bug (CODE VARCHAR(50))

DECLARE @BugRep TABLE (
    BugCode         VARCHAR(50),
    --DevFirstName    VARCHAR(50),
    --DevLastName     VARCHAR(50),
    --BugDate         VARCHAR(20),
    IsValid         CHAR(1)
)

INSERT INTO Bug (CODE) VALUES ('Code1'), ('Code2'), ('Code3')

INSERT INTO @BugRep (BugCode) VALUES ('Code1'), ('Code2'), ('Code4')

SELECT CODE FROM Bug ORDER BY CODE
SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode

UPDATE @BugRep                          -- Can't be [@BugRep] ("Invalid object name '@BugRep'.")
SET IsValid = 'N'
WHERE NOT EXISTS (
    SELECT *
    FROM BUG b
    WHERE [@BugRep].BUGCODE = b.CODE    -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".")
)

SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode

UPDATE @BugRep                          -- Can be either @BugRep or [@BugRep]
SET IsValid = 'Y'
FROM @BugRep                            -- Can't be [@BugRep] ("Invalid object name '@BugRep'.")
LEFT OUTER JOIN BUG
ON [@BugRep].BUGCODE = BUG.CODE         -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".")
WHERE BUG.CODE IS NOT NULL

SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode

DROP TABLE Bug
GO
7
ответ дан 3 December 2019 в 05:35
поделиться

Вот версия двух предыдущих с использованием псевдонимов для решения вашей проблемы:

UPDATE @BugRep
SET IsValid = 'N'
FROM @BugRep BR
    LEFT JOIN BUG B
        ON BR.BUGCode = B.CODE
WHERE B.CODE is null

Это также позволяет избежать неэффективности, связанной с «не равно нулю» и «не существует».

1
ответ дан 3 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: