sql - 有没有办法通过 WHERE 子句中的 DECLARE 指向表中的特定列?
问题描述
我正在尝试创建一个有点动态的搜索字符串,并且我正在尝试解决一个大型 CASE WHEN 场景,但在我求助于做一个 CASE WHEN 之前,我在这里试试运气。
我试图以字符串格式“exec('code')”在它工作的地方执行它,但后来我遇到了 getdate() 的另一个问题,我不会详细说明。
DECLARE @ProductLines nvarchar(50) = 'usr_author'
DECLARE @searchProductlines nvarchar(50) = 'hc'
SELECT TOP 20
Productid as Produktid,
usr_Author AS Author,
Header AS Title,
usr_Publisher AS Publisher,
CustomerId AS Customerid, FROM Products
WHERE
(@ProductLines Like '%' + @searchProductlines + '%')
我已经删除了所有其他与此处无关的代码。我想要做的是将@ProductLines 声明为列'usr_author',这样我在WHERE 子句中可以稍后在下拉菜单中使用@ProductLines 作为动态列选择器。
但是,这不起作用。如果我写 usr_Author 而不是 @ProductLines,我会得到我需要的结果,但它是一个静态解决方案,而不是一个动态解决方案。在这种情况下,最佳做法是什么?
解决方案
您只能使用参数替换常量值。您不能替换标识符——包括列名、表名等。
您可以动态执行此操作:
DECLARE @col nvarchar(50) = 'usr_author'
DECLARE @search nvarchar(50) = 'hc'
DECLARE @sql NVARCHAR(MAX);
SET @sql = '
SELECT TOP 20
Productid as Produktid,
usr_Author AS Author,
Header AS Title,
usr_Publisher AS Publisher,
CustomerId AS Customerid
FROM Products
WHERE @col Like ''%'' + @search + ''%''
';
SET @sql = REPLACE(@sql, '@col', @col);
EXEC sp_executesql @sql,
N'@search nvarchar(50)',
@search=@search;
推荐阅读
- string - Tcl 搜索/删除
- r - 如果元素在向量中,则所有组都在 dplyr 中取一些值
- c# - 由于固定的 GC 句柄/没有可见的 gc 根导致内存泄漏
- tensorflow.js - Tensorflow.js BodyPix 在浏览器中对于单个图像非常慢
- javascript - 如果图像在 AWS 上可用,如何加载图像?
- c# - rldc 报告 Winforms 中的 PrintDialog() 错误
- model-view-controller - 是否可以在 Zend Framework 中使用 HTML 表单而不是 ZendForm?
- swift - 使用 Combine 观察泛型值
- firebase - Flutter 依赖冲突将 firebase-admin 添加到我的 pubspec.yaml
- python - 如何在python中更改单选按钮状态?