sql - SQLite 中的后备 UPDATE 语句
问题描述
我想在 SQLite 中运行一个 UPDATE 语句,当没有行会受到第一个影响时,它将转换为另一个 UPDATE 语句。在 t-sql 我可以简单地写
IF EXISTS (SELECT * FROM Table WHERE Field1 = @FieldValue)
UPDATE Table WITH (ROWLOCK)
SET OtherField1 = @OtherField1Value,
OtherField2 = @OtherField2Value,
...
WHERE Field1 = @FieldValue
ELSE
UPDATE Table WITH (ROWLOCK)
SET OtherField1 = @OtherField1Value,
OtherField2 = @OtherField2Value,
...
WHERE Field2 = @FieldValue
但是,这种语法在 SQLite 中不起作用。理想情况下,我更喜欢
- 适用于 SQLite 和 Microsoft SQL Server(我们允许用户使用其中任何一种)
- 不需要运行 2 个不同的语句(运行第一个,然后如果没有行受到影响,则运行第二个)
解决方案
SQLite中没有WITH (ROWLOCK)
等价物,而且 SQLite 也不支持变量或存储过程。
这将做到:
UPDATE Table
SET OtherField1 = :OtherField1Value,
OtherField2 = :OtherField2Value,
...
WHERE Field1 = :FieldValue
OR (
Field2 = :FieldValue
AND NOT EXISTS (SELECT 1 FROM table WHERE Field1 = :FieldValue)
)
将:value
s 替换为您要传递的参数。
该查询适用于 SQLite 和任何其他数据库(我能想到的),因为它是用标准 SQL 编写的。
推荐阅读
- sql - 如何在 SQL 中合并三个大文本文件以准备导出到 SPSS 和 R
- reactjs - 在 React Navgiation 3 中,如何从不同的堆栈推送屏幕并弹回调用屏幕
- sql-server - 如何在大小写时使用计数?
- python - 如何为“标签”设置 xpath 正确
- c# - C# list.remove 在 foreach 循环中抛出枚举操作错误
- tensorflow - AttributeError:模块“tensorboard.summary._tf.summary”没有属性“summary_scope”
- python - 如何使用 Python 在 2 个不同的工作簿中合并 2 个同名文件
- python - 在 i 和 i+1 行的条件下创建一个新的标志列?
- bash - Bash 字符串替换/匹配:跳过第一个匹配
- c# - 操作Json删除冗余数据c#