每当我在列中查找重复值时,我会写一个像这样的小脚本:
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表达式必须至少包含一个不是外部引用的列。
我做错了什么?
答案 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