我正在尝试比较两个不同表上的名称,但我希望用户定义他们要搜索的名称列(前名,中间名,姓氏)。
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
像这样的事情还是可能的吗?还是我在树上叫错了树?
如果需要更多信息,请询问。
答案 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;