Я использовал сценарий для создания представления, которое имеет имя таблицы для каждой таблицы в базе данных, а также количество строк данных в соответствующей таблице. Все отлично работает с 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)
'Rowcount' является зарезервированным словом: https://msdn.microsoft.com/en-us/library/ms189822.aspx – sgeddes
Бинго! Спасибо. Я переименовал имя столбца в скрипте, чтобы создать представление, и теперь он работает. – Scro