ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

此查询在 OracleDerbyMySQL 中运行良好 - 但它在 SQL Server 2008 中失败 并出现以下错误:

“消息 102,级别 15,状态 1,第 1 行 'Q' 附近的语法不正确。”

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

但我需要使用别名。

为什么需要使用别名?看起来你不需要它。
是的——从编程的角度来看,我不需要它。但是我有一个现有的/旧的库,它可以生成各种带有表别名的 DML SQL。该库有许多具有复杂逻辑的类。现在摆脱库中的表别名比调整现有逻辑以适用于 MSSQL 更多的工作。此外,当涉及多个表时,我确实需要有表别名。

M
Mark Byers

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

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

不过,这里不需要别名。


是的 !!!有用。感谢您及时的回复。您是否知道为什么 MSSQL 服务器支持这种非常规的更新语法?
马克拜尔斯 - 很好的答案!这种语法允许我添加一个注释掉的 Select 语句,它允许我通过先执行选择来测试更新(从选择向下突出显示并执行):SET Q.TITLE = 'TEST' -- SELECT *
好的。这使得在 where 子句中使用智能感知变得更加容易。
那不是别名。这只是完全限定的“table.column”名称:-/
@ScottWelker - HOLD_TABLE 是桌子。 Q 是别名。 TITLE 是列。
R
Ryk

您始终可以采用 CTE(通用表格表达式)方法。

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

UPDATE updateCTE
SET TITLE = 'TEST';

是的 - 它也有效。但是对于 JDBC/Java 程序来说,这是一种复杂的语法。感谢您的答复。