如何在SQL Server 2008中使用表别名编写UPDATE SQL?

jav*_*r71 191 sql sql-server alias sql-server-2008 sql-update

我有一个非常基本的UPDATE SQL-

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;
Run Code Online (Sandbox Code Playgroud)

该查询中运行良好Oracle,Derby,MySQL-但它在SQL Server 2008中失败 与以下错误:

"Msg 102,Level 15,State 1,Line 1'Q'附近的语法不正确."

如果我从SQL中删除所有出现的别名"Q",那么它可以正常工作.

但我需要使用别名.

Mar*_*ers 377

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

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;
Run Code Online (Sandbox Code Playgroud)

但是这里不需要别名.

  • 马克·拜尔斯-好答案!!这种语法使我可以添加一条注释掉的Select语句,该语句使我可以通过先执行select(从select向下突出显示并执行)来测试更新:`SET Q.TITLE ='TEST'-SELECT *` (3认同)
  • 是的!!! 有用.感谢您及时的回复.您是否知道为什么MSSQL服务器支持更新的非常规语法? (2认同)
  • 尼斯.这使得在where子句中更容易使用intellisense. (2认同)
  • @ScottWelker - `HOLD_TABLE` 是表。“Q”是别名。`TITLE` 是列。 (2认同)

Ryk*_*Ryk 17

你总是可以采用CTE(Common Tabular Expression)方法.

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

UPDATE updateCTE
SET TITLE = 'TEST';
Run Code Online (Sandbox Code Playgroud)