sql - 来自变量的 IN 子句
问题描述
我有以下代码允许在 IN 子句中使用变量:
DECLARE @Ids varchar(50);
SET @Ids = '24,25';
SELECT *
FROM table
WHERE ','+@Ids+',' LIKE '%,'+CONVERT(VARCHAR(50),id_field)+',%';
由于@Ids 是一个可以为空的可选字段,我将如何修改代码以使其包含
(@Ids IS NULL OR id_field = @Ids)
解决方案
几乎是你已经拥有的(为了可读性添加了括号)
WHERE (@Ids IS NULL) OR (','+@Ids+',' LIKE '%,'+CONVERT(VARCHAR(50),id_field)+',%')
在旁注中确实意识到像这样的查询会绕过id_field
可能存在的任何索引,并将执行表扫描以查找匹配项。
推荐阅读
- r - 如何使用 R 的 ggplot2 包更改条形图的颜色?
- android - 在没有 BroadcastReceiver 的 BOOT_COMPLETED 上启动 Activity
- python - Python 代码不适用于负索引,需要将用户输入视为时间
- typo3-9.x - 使用 Typo3 eID 进行 nusoap 呼叫
- angular - IE11中的Angular 8应用程序运行问题
- go - 去导入本地包
- javascript - Electron 不会将 json 文件添加到应用程序
- reactjs - 如何/在哪里将模型/控制器放在下一个 js 应用程序中?
- javascript - 从 $.getJSON 范围之外访问外部文件 JSON 数据
- c# - 即使掩码设置为 0,图像也会获得新值