簡體   English   中英

SQL查詢-無效的列名

[英]sql query - Invalid column name

執行以下sql查詢時出現錯誤。

SELECT 
    RTRIM(name) AS [Segment Name], 
    growth,groupid AS [Group Id], 
    filename AS [File   Name],
    CAST(size/128.0 AS DECIMAL(10,2)) AS [Size in MB],
    CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2)) AS [Space Used],
    CAST(size/128.0-(FILEPROPERTY(name, 'SpaceUsed')/128.0) AS DECIMAL(10,2)) AS [Available Space],
    CAST((CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2))/CAST(size/128.0 AS DECIMAL(10,2)))*100 AS DECIMAL(10,2)) AS [Percent_Used]
FROM 
    sysfiles
WHERE 
    growth = 0 AND  Percent_Used > 60
ORDER BY 
    groupid DESC

錯誤提示:

消息207,第16級,州1,第7行
無效的列名“ Percent_Used”。

為什么會出現此錯誤?

如果看到查詢的邏輯順序處理,則在選擇之前先評估where子句。 要使其工作,您需要使用派生表概念。

1. FROM
2. ON
3. OUTER
4. **WHERE**
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. **SELECT**

http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/

   Select * from
    (
        SELECT 
            RTRIM(name) AS [Segment Name], 
            growth,groupid AS [Group Id], 
            filename AS [File   Name],
            CAST(size/128.0 AS DECIMAL(10,2)) AS [Size in MB],
            CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2)) AS [Space Used],
            CAST(size/128.0-(FILEPROPERTY(name, 'SpaceUsed')/128.0) AS DECIMAL(10,2)) AS [Available Space],
            CAST((CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2))/CAST(size/128.0 AS DECIMAL(10,2)))*100 AS DECIMAL(10,2)) AS [Percent_Used]
        FROM 
            sysfiles
    ) DT

        WHERE growth = 0 AND  Percent_Used > 60
        ORDER BY groupid DESC

您正在嘗試使用已定義的列在WHERE子句中進行過濾。 sysfiles中不存在此列

如果你願意,你可以換行SELECT在另一個SELECT做對后者的過濾SELECT 這樣,該列已經“存在”。

WITH cte
AS
(
SELECT 
    RTRIM(name) AS [Segment Name], 
    growth,groupid AS [Group Id], 
    filename AS [File   Name],
    CAST(size/128.0 AS DECIMAL(10,2)) AS [Size in MB],
    CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2)) AS [Space Used],
    CAST(size/128.0-(FILEPROPERTY(name, 'SpaceUsed')/128.0) AS DECIMAL(10,2)) AS [Available Space],
    CAST((CAST(FILEPROPERTY(name, 'SpaceUsed')/128.0 AS DECIMAL(10,2))/CAST(size/128.0 AS DECIMAL(10,2)))*100 AS DECIMAL(10,2)) AS [Percent_Used]
FROM 
    sysfiles
)
SELECT *
FROM cte
WHERE 
    growth = 0 
    AND  Percent_Used > 60
ORDER BY [Group Id] DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM