Search code examples
sqlsql-serversql-server-2017

Update a Table Variable Where Not Exists


UPDATE 
    @Customer
SET 
    ValidaitonAction = 1
WHERE NOT EXISTS
    (SELECT 1 FROM DMScustomerupload WHERE AccountNumber = @Customer.AccountNumber)

Where @Customer is a TABLE variable:

DECLARE @Customer TABLE ( ID int,
                        ValidaitonAction int,
                        ... other columns))

On the last line, I get

Must declare scalar variable @Customer


Solution

  • You need a table alias:

    UPDATE c
        SET ValidationAction = 1
        FROM @Customer c
        WHERE NOT EXISTS (SELECT 1 FROM DMScustomerupload cu WHERE cu.AccountNumber = c.AccountNumber);
    

    SQL Server automatically interprets anything that starts with a @ as a variable (of some sort). Table aliases are a different thing, so it doesn't find a match.