在不同表中的类似命名列上使用SQL变量

时间:2018-08-22 11:09:02

标签: sql sql-server variables

我正在尝试比较两个不同表上的名称,但我希望用户定义他们要搜索的名称列(前名,中间名,姓氏)。

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

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

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

1 个答案:

答案 0 :(得分:1)

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