2011-02-12 54 views
133

我有一个非常基本的UPDATE SQL -如何在SQL Server 2008中使用Table别名编写UPDATE SQL?

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

该查询运行在Oracle中,德比,我-SQL罚款 - 但它在SQL Server 2008 有以下错误失败: “消息102,级别15,状态1,行1 “Q”附近的语法错误。“

如果我从SQL中删除所有出现的别名“Q”,那么它就起作用。

但我需要使用别名。

+5

为什么你需要使用别名?它似乎并不像你需要它。 – 2011-02-12 23:59:24

+4

是的 - 从编程的角度来看,我不需要它。但是我有一个现有的/旧的库,它可以生成各种带有表别名的DML SQL。图书馆有许多类,有一种复杂的逻辑。现在摆脱库中的表别名比调整现有的适用于MSSQL的逻辑更有效。当涉及多个表时,我确实需要有表别名。 – javauser71 2011-02-14 06:09:14

回答

268

在SQL Server上的更新语句中使用别名的语法如下:

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

别名不应该是必要这里虽然。

+2

是的!!!有用。感谢您及时的回复。你有什么机会知道为什么MSSQL服务器支持这种非常规的更新语法? – javauser71 2011-02-14 06:02:51

11

您总是可以采用CTE(通用表格式)方法。

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

UPDATE updateCTE 
SET TITLE = 'TEST';