SQL更新语句,默认为列名

时间:2014-05-04 10:50:22

标签: mysql sql sql-server

我有一个SQL代码来更新列中的值。 我需要找到一个适用于MS SQL和MySQL的查询。 主要问题是我使用的列是Default和Type,它们是SQL中保存的名称,因此它不能使用正常的更新语句。

我找到了以下解决方案,但我想对两者进行一次查询 -

--Clearing Data logs Defualt MS SQL
UPDATE queries
SET [Default] = 0
FROM queries
WHERE [Type] = 4

--Clearing Data logs Defualt MySQL
UPDATE queries q
SET q.Default = 0
WHERE q.TYPE = 4

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您必须为两台服务器启用ANSI引号。如果您这样做,您可以使用双引号引用您的标识符。

For MySQL

SET sql_mode = 'ANSI_QUOTES'
  

将“"”视为标识符引号字符(如“” quote character) and not as a string quote character. You can still use “”   在启用此模式时引用标识符。启用ANSI_QUOTES后,   你不能使用双引号来引用文字字符串,   因为它被解释为标识符。

For MS SQL Server

SET QUOTED_IDENTIFIER ON
  

使SQL Server遵循关于引号的ISO规则   分隔标识符和文字字符串。由...分隔的标识符   双引号可以是Transact-SQL保留关键字或   可以包含Transact-SQL通常不允许的字符   标识符的语法规则。

现在您可以编写适用于MS SQL Server和MySQL的单个查询:

UPDATE queries q
SET q."Default" = 0
WHERE q."TYPE" = 4

在我忘记之前:解决这些问题的最佳方法是避免使用保留字作为标识符,请参阅solution 1。你必须避免所有相关世界的保留词(T-SQL和MySQL的sql方言)。