WHERE子句中带子字符串的SQL视图?

时间:2017-10-19 08:01:42

标签: sql-server view substring where

我想将此查询放入新视图中。对于您的信息,dbo.TransferAS400Auftrag也是一种观点。

SELECT  dbo.TransferAS400Auftrag.Angebotsnummer AS AngNr1, 
        dbo.CSDokument.Angebotsnummer AS AngNr2, 
        dbo.TransferAS400Auftrag.OfferAngebotsnummer AS OAngNr1, 
        substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) AS OAngNr1_SUB10,
        dbo.CSDokument.OfferAngebotsnummer AS OAngNr2, 
        substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10) AS OAngNr2_SUB10

FROM    dbo.TransferAS400Auftrag INNER JOIN
        dbo.CSDokument ON dbo.TransferAS400Auftrag.Angebotsnummer = 
        dbo.CSDokument.Angebotsnummer

WHERE   (LEN(dbo.TransferAS400Auftrag.OfferAngebotsnummer) > 10) AND 
        substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) 
        =  substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10)

但是,管理工作室的视图构建器始终将substring() = substring()部分从where子句更改为INNER JOIN部分。但是,通过此更改,我无法保存视图(error- object reference not set to an instance of an object)。为什么不能在WHERE子句中使用substring() = substring()?或者我可以用另一种方式达到目标吗?

2 个答案:

答案 0 :(得分:0)

嗯,使用CREATE VIEW它有效。可能这对建造者来说确实是一个问题。谢谢你的提示。

答案 1 :(得分:0)

只需使用Transact SQL创建它,而不是使用管理工作室创建视图窗口,如下所示:

CREATE VIEW AS ViewName
AS
    SELECT  dbo.TransferAS400Auftrag.Angebotsnummer AS AngNr1, 
            dbo.CSDokument.Angebotsnummer AS AngNr2, 
            dbo.TransferAS400Auftrag.OfferAngebotsnummer AS OAngNr1, 
            substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) AS OAngNr1_SUB10,
            dbo.CSDokument.OfferAngebotsnummer AS OAngNr2, 
            substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10) AS OAngNr2_SUB10

    FROM    dbo.TransferAS400Auftrag INNER JOIN
            dbo.CSDokument ON dbo.TransferAS400Auftrag.Angebotsnummer = 
            dbo.CSDokument.Angebotsnummer

    WHERE   (LEN(dbo.TransferAS400Auftrag.OfferAngebotsnummer) > 10) AND 
            substring(dbo.TransferAS400Auftrag.OfferAngebotsnummer, 1, 10) 
            =  substring(dbo.CSDokument.OfferAngebotsnummer, 1, 10);