2015-12-10 32 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列,我就不能這樣做。

+0

'Rowcount'是一個保留字:https://msdn.microsoft.com/en-us/library/ms189822.aspx – sgeddes

+0

Bingo!謝謝 - 我在腳本中重命名了列名以創建視圖,現在它可以工作。 – Scro

回答

1

行數是一個保留字(FYI在SQL Server 2014上運行此),您可以使用[]選擇保留字爲:

[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列。

相關問題