【发布时间】:2014-03-13 16:34:19
【问题描述】:
我继承了一个需要为多个项目修改的存储过程,并且遇到了这个多部分标识符错误消息:
The multi-part identifier "schema.tablename" could not be bound
schema 是我在数据库中使用的架构,当然 tablename 是单个表名。
这是我的 Sql 查询:
CREATE TABLE #Results (TableNames nvarchar(50), ColumnContent nvarchar(250), Count int)
SET NOCOUNT ON
DECLARE @TableName nvarchar(256)
SET @TableName = ''
WHILE @TableName IS NOT NULL
BEGIN
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL)
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ' + @TableName + ',[Column5], COUNT(*) FROM '+ @TableName +' ORDER BY NEWID()'
)
END
END
SELECT * FROM #Results
DROP TABLE #Results
基本上我想搜索所有表,并为每个表存储表名、指定列的不同内容以及这些不同列值的计数。非常感谢任何帮助以查看我的问题所在。
【问题讨论】:
-
我猜这是罪魁祸首:
'SELECT ' + @TableName + ',[Column5], COUNT(*) FROM '+ @TableName +' ORDER BY NEWID()'proc 正试图将 Schema.TableName 显示为结果集中的列,对吧?我会试试这个:'SELECT ''' + @TableName + ''',[Column5], COUNT(*) FROM '+ @TableName +' ORDER BY NEWID()' -
我现在得到
msg 8120 -Column 'schema.tablename.columnname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.显然我有很多问题。我将如何获得随机部分 (NEWID()) 以及对 `GROUP BY' 的明显需求? -
我本来想从表中随机抽样,所以查询最初看起来像这样:
SELECT TOP 100 tablename, columnname, COUNT(*) FROM tablename ORDER BY NEWID() -
好的,所以我按问题确定了分组和排序。我这样做了:
group by columnname order by 2 desc. -
@DMason 如果您将您的建议设置为答案,我会接受。再次感谢!
标签: sql sql-server