SQL在视图

时间:2015-07-22 05:34:22

标签: sql sql-server

这里我有一个表格来验证数据。

CREATE VIEW [VendorView]
AS 
    WITH Vendors AS
    (
        SELECT 
            ISNULL(ROW_NUMBER() OVER (ORDER BY [VendorCode],[VendorName]), 0) AS RN, * 
        FROM [A0112].[Vendor]
    )
    SELECT 
        CASE WHEN [VendorCode] IS NULL OR [VendorCode] ='' 
                THEN 'ERROR'
                ELSE [VendorCode] 
        END AS [VendorCode]
        ,[VendorName]
        ,[VendorCategory]
        ,[Address]
        ,[Region]
        ,[State]
        ,[Province]
        ,[Country]
        ,[Contact]
        ,[VendorStatus]
        ,[VendorRating]
        ,[AuthorizationGroup]
        ,[Currency]
        ,[RecordDateTime]
        ,[ErrorStatus]
    FROM   
        Vendors
    WHERE 
        RN IN (SELECT MAX(RN) MAX_RN
               FROM Vendors 
               GROUP BY 
                   [VendorCode], [VendorName], [VendorCategory],
                   [Address], [Region], [State], [Province],
                   [Country], [Contact], [VendorStatus],
                   [VendorRating], [AuthorizationGroup], [Currency])

在我看来,您可以看到我检查 VendorCode是空还是空并返回 ERROR 而不是其值。

这样的一个或多个Case语句可以验证表的数据。

我需要的是,如果任何列包含值错误,我需要向Invalid Record列添加常见错误ErrorStatus

因为当我使用此视图时,我不希望有多个条件来检查我的Where子句中的错误列,如下所示

SELECT * 
FROM [VendorView]
WHERE VendorCode <> 'ERROR' 
  AND [VendorName] <> 'ERROR'

我想要......

   SELECT * FROM [VendorView]
    WHERE [ErrorStatus]<> 'Invalid Record' 

1 个答案:

答案 0 :(得分:2)

我认为有两种方法可以做到这一点。第一种方法是使用case列的ErrorStatus语句,如下所示

 CASE WHEN [VendorCode] IS NULL OR [VendorCode] ='' 
           OR [VendorName] IS NULL OR [VendorName] = ''
      THEN 'Invalid Record'  
      ELSE 'Valid Record'
END as ErrorStatus

第二种方法是在视图中使用以下条件(但我不确定它是否适合你)

SELECT * 
FROM [VendorView]
WHERE 'Invalid Record' in ([VendorCode],[VendorName])