首页 > 解决方案 > 在不同表中的类似命名列上使用 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

像这样的事情是可能的还是我叫错了树?

如果需要更多信息,请询问。

标签: sqlsql-servervariables

解决方案


为此,您需要使用动态 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;

推荐阅读