我有一个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
非常感谢您的帮助!
答案 0 :(得分:3)
您必须为两台服务器启用ANSI引号。如果您这样做,您可以使用双引号引用您的标识符。
SET sql_mode = 'ANSI_QUOTES'
将“"”视为标识符引号字符(如“
” quote character) and not as a string quote character. You can still use “
” 在启用此模式时引用标识符。启用ANSI_QUOTES后, 你不能使用双引号来引用文字字符串, 因为它被解释为标识符。
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方言)。