2015-12-10 2 views
1

Я использовал сценарий для создания представления, которое имеет имя таблицы для каждой таблицы в базе данных, а также количество строк данных в соответствующей таблице. Все отлично работает с SELECT *. Тем не менее, я бы хотел запросить только определенные строки, но я не могу этого сделать.Почему я не могу запросить отдельные столбцы в представлении SQL?

Вид был создан с помощью следующего сценария (кредит на DatabaseZone.com для сценария):

CREATE VIEW RowCount_AllTables 
AS 
    SELECT DISTINCT 
     sys.schemas.name, sys.tables.name AS tableName, 
     sys.dm_db_partition_stats.row_count AS 'RowCount' 
    FROM 
     sys.tables 
    INNER JOIN 
     sys.dm_db_partition_stats ON sys.tables.object_id = sys.dm_db_partition_stats.object_id 
    INNER JOIN 
     sys.schemas ON sys.tables.schema_id = sys.schemas.schema_id 
    WHERE  
     (sys.tables.is_ms_shipped = 0) 

Когда я бегу Select * против результирующей точки зрения, я получаю результаты, такие как:

name tableName  RowCount 
dbo  Table1   2 
dbo  Table2   1230 
dbo  Table3   0 

Если я запрашиваю только столбец tableName, это отлично работает и возвращает имена таблиц. Однако, если я попытаюсь также вызвать столбец RowCount, я получаю сообщение об ошибке Incorrect syntax near the keyword 'RowCount. Это происходит независимо от того, квалифицирую ли я базу данных - похоже, не признает RowCount как допустимый столбец, который я могу вызвать в запросе. Так что этот сценарий не удается:

SELECT RowCount 
FROM RowCount_AllTables; 

Но это работает:

SELECT tableName 
FROM RowCount_AllTables; 

Что происходит? Я хотел бы иметь возможность псевдонимы имен столбцов в представлении в моем запросе, но я не могу этого сделать, пока не могу ссылаться на столбец RowCount.

(FYI работает это в SQL Server 2014)

+0

'Rowcount' является зарезервированным словом: https://msdn.microsoft.com/en-us/library/ms189822.aspx – sgeddes

+0

Бинго! Спасибо. Я переименовал имя столбца в скрипте, чтобы создать представление, и теперь он работает. – Scro

ответ

1

ROWCOUNT является зарезервированным словом, вы можете выбрать зарезервированные слова, используя [], как:

[Rowcount] 
0

Благодаря @sgeddes для указывая путь. Отбросил представление, изменил сценарий для его создания, чтобы использовать другое имя для столбца счетчика строк, и теперь он работает так, как ожидалось. Проблема заключалась в конфликте с Rowcount, являющимся зарезервированным словом.

Изменена создать таблицу сценария на этой линии:

SELECT distinct sys.schemas.name, sys.tables.name AS tableName, 
sys.dm_db_partition_stats.row_count AS 'RowCount' 

к:

SELECT distinct sys.schemas.name, sys.tables.name AS tableName, 
sys.dm_db_partition_stats.row_count AS 'Row_Count' 

... в этот момент я теперь могу сослаться на Row_Count колонку, как хотелось бы.

Смежные вопросы