使用参数查找重复项

时间:2017-05-17 19:57:08

标签: sql tsql

每当我在列中查找重复值时,我会写一个像这样的小脚本:

SELECT COL1, COUNT(COL1)
FROM TABLE1 
GROUP BY COL1
HAVING COUNT(COL1) >1

它有效,但我必须打字。 所以,我决定尝试参数:

DECLARE @table VARCHAR(100)
DECLARE @column VARCHAR(100)

SET @table = 'TABLE1';
SET @column = 'COLUMN1';

SELECT @column, COUNT(@column)
FROM @table
GROUP BY @column
HAVING COUNT(@column) >1

SQL不喜欢这个。它声明:消息1087,级别16,状态1,行34.必须声明表变量“@table”。

如果我稍微修改使用表名:

DECLARE @column VARCHAR(100)
SET @column = 'COLUMN1';

SELECT @column, COUNT(@column)
FROM TABLE1
GROUP BY @column
HAVING COUNT(@column) >1

我收到此错误:消息164,级别15,状态1,第51行 每个GROUP BY表达式必须至少包含一个不是外部引用的列。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我可能会使用动态查询来完成这样的事情。

DECLARE @table VARCHAR(100)
DECLARE @column VARCHAR(100)
DECLARE @SQL NVARCHAR(max)

SET @table = 'TABLE1';
SET @column = 'COLUMN1';
SET @SQL = 
'SELECT ' + @column +' , COUNT( ' + @column + ')
 FROM ' + @table + '
GROUP BY ' + @column + '
HAVING COUNT(' + @column + ') >1'

EXEC sp_executesql @sql