sql - 在不同表中的类似命名列上使用 SQL 变量
问题描述
我正在尝试比较两个不同表上的名称,但我希望用户定义他们想要搜索的名称列(名字、中间名、姓氏)。
DECLARE @Col VARCHAR(50)
SET @Col = 'Surname'
SELECT tbl1.ID, tbl1.@Col, tbl2.ID, tbl2.@Col
FROM table1 tbl1
INNER JOIN table2 tbl2
ON tbl2.ID = tbl1.ID
像这样的事情是可能的还是我叫错了树?
如果需要更多信息,请询问。
解决方案
为此,您需要使用动态 SQL:
DECLARE @Col VARCHAR(50); -- should use sysname
SET @Col = 'Surname';
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = '
SELECT tbl1.ID, tbl1.@Col, tbl2.ID, tbl2.@Col
FROM table1 tbl1 INNER JOIN
table2 tbl2
ON tbl2.ID = tbl1.ID';
SET @sql = REPLACE(@sql, '@Col', @Col); -- should really use [QUOTENAME()][1]
EXEC sp_executesql @sql;
推荐阅读
- javascript - 如何缓存来自 Node 中使用 fetch 的异步函数的数据
- sql-server - 经典 ASP、Windows 身份验证(带 PassThrough)、禁用匿名、带服务帐户的 AppPool ID、仍然向 SQL Server 发出双跳问题
- ios - 带有音频文件的 UNNotificationAttachment 的用例是什么?
- sql - Postgres - INSERT INTO 和用例何时
- scala - Scala:如何实例化一个继承当前上下文的解释器?
- sql-server - 实体框架在从数据库更新时不返回地理列
- error-handling - 应用程序运行时异常未发送到 errorChannel 或 ServiceActivator 无法侦听 errorChannel
- tcl - TCL regsub 一次性注册多个特殊字符
- android - FAILURE:构建失败,从 git 克隆应用程序时出现异常
- r - 多列缺失值的新变量