304

I have a very basic UPDATE SQL -

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;

This query runs fine in Oracle, Derby, MySQL - but it fails in SQL server 2008 with following error:

"Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'Q'."

If I remove all occurrences of the alias, "Q" from SQL then it works.

But I need to use the alias.

2
  • 5
    Why do you need to use an alias? It doesn't seem like you need it. Commented Feb 12, 2011 at 23:59
  • 9
    Yes - from the programming perspective I do not need it. But I have an existing/old library which generates all kind of DML SQLs with table aliases. The library has lot of classes with a kind of complex logic. Now getting rid of table-aliases in the library is more work than tweaking the existing logic to work for MSSQL. Also when multiple tables are involved, I do need to have table-alias. Commented Feb 14, 2011 at 6:09

3 Answers 3

604

The syntax for using an alias in an update statement on SQL Server is as follows:

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;

The alias should not be necessary here though.

Sign up to request clarification or add additional context in comments.

8 Comments

Yes !!! It works. Thanks for the quick response. By any chance do you know why MSSQL server supports such unconventional syntax for update?
Mark Byers - Great Answer!! This syntax allows me to add a commented out Select statement, which allows me to test the update by doing the select first (highlight from the select down and execute): SET Q.TITLE = 'TEST' -- SELECT *
Nice. This makes it easier to use intellisense in the where clause.
That's not an alias. That's just the fully qualified 'table.column' name :-/
@ScottWelker - HOLD_TABLE is the table. Q is the alias. TITLE is the column.
|
22

You can always take the CTE, (Common Tabular Expression), approach.

;WITH updateCTE AS
(
    SELECT ID, TITLE 
    FROM HOLD_TABLE
    WHERE ID = 101
)

UPDATE updateCTE
SET TITLE = 'TEST';

1 Comment

Yes - it also works. But for a JDBC/Java program this is a kind of complex syntax. Thanks for your response.
1

The query that you have written needs to be modified. I feel that there is no need of using alias keyword in your query.

Without Alias keyword:

    UPDATE HOLD_TABLE 
    SET TITLE='TEST'
    WHERE ID=101;

With Alias keyword: (CTE approach)

    WITH HOLD_TABLE1 AS 
    (SELECT * FROM HOLD_TABLE)
    UPDATE HOLD_TABLE1 
    SET TITLE='TEST'
    WHERE ID=101;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.