内部联接和 IIF 错误

Posted

技术标签:

【中文标题】内部联接和 IIF 错误【英文标题】:Error in Inner Join and IIF 【发布时间】:2013-06-26 17:52:01 【问题描述】:

我希望你能帮助我解决这两个问题。我将一堆代码从 Accessfile 复制到 MSSQL Server 以创建一些视图。 到目前为止,一切都运行良好,但现在我卡住了......

一个问题与“IIF”-命令有关:

IIf([T024_ArtStamm]![C002] Like "A*",[dbo_T023_ArtPreise]![C006],[A PreisListe 01]![C013]) AS Verrechnungspreis

我改成:

IIf([Buran.dbo.T024_ArtStamm].[c002] like 'A%',
    [Buran.dbo.T023_ArtPreise].[C006],
    [Buran.dbo.A_PreisListe_01].[C013]) AS Verrechnungspreis

对我来说它看起来是正确的。但是服务器有一些问题......

Msg 156, Level 15, State 1, Line 12
Incorrect syntax near the keyword 'like'.

我也尝试了 '=',但同时我没有想法......

第二个问题与内部连接有关: 再次在 Access 中工作正常:

Select [...] 
FROM ((((T024_ArtStamm INNER JOIN 
dbo_t057 AS dbo_T057_ArtZusatz ON
(T024_ArtStamm.c106 = dbo_T057_ArtZusatz.c000) AND 
(T024_ArtStamm.mesocomp = dbo_T057_ArtZusatz.mesocomp) AND 
(T024_ArtStamm.mesoyear = dbo_T057_ArtZusatz.mesoyear)) INNER JOIN [--goes on for a while--]

我转换了它,以便可以找到所有表格...

Select [...] 
--Line 54
    FROM ((((Buran.dbo.T024_ArtStamm INNER JOIN 
--/
    CWLDATEN_91.dbo.t057 AS Buran.dbo.T057_ArtZusatz ON 
    (Buran.dbo.T024_ArtStamm.c106 = dbo.T057_ArtZusatz.c000) AND 
    (Buran.dbo.T024_ArtStamm.mesocomp = dbo.T057_ArtZusatz.mesocomp) AND 
    (Buran.dbo.T024_ArtStamm.mesoyear = dbo.T057_ArtZusatz.mesoyear)) INNER JOIN [--and it goes on--]

但错误是

Msg 102, Level 15, State 1, Line 54 Incorrect syntax near 'Buran'. 

我检查了所有表格 - 它们存在。 我尝试使用 Squirrel SQL 而不是 SQL Server 管理器并得到相同的错误...

我哪里错了?

【问题讨论】:

SQL Server 在 SQL Server 2012 之前不支持 IIF。如果您使用的是较低版本,则需要将该逻辑更改为 CASE expression。您还确定[Buran.dbo.T024_ArtStamm] 应该包含在单个[square bracket] 中吗?你真的有一张名为Buran.dbo.T024_ArtStamm 的表吗?最后,摆脱 Access 在您的代码中乱扔垃圾的所有愚蠢的((((((((parentheses nonsense))))) 这是 SQL Server 2012。我首先想到了这一点,但 IIF 有效。在内连接之后,其他内连接的整个鼠尾都跟着不舒服......我添加了方括号......尝试了一些“实验”......没有变化:-/ 对,对不起 - 此错误代码来自这些实验之一。正确的代码如下:Msg 102, Level 15, State 1, Line 54 'Buran' 附近的语法错误。 【参考方案1】:

你有什么版本的sql server??? iif 在 2008R2 之前的版本中不存在

对于你的第二个问题,你的错误是在“别名”,你必须写“Tables AS aliasName”,但是你有“Table AS Database.Table”

【讨论】:

如标签所示,它是 2012-Server。您的回答是有道理的,但是是错误的...如图所示,错误在之前的行中...

以上是关于内部联接和 IIF 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 上使用内部联接更新语句

带有内部联接的 SQL 更新查询语法

内部连接错误

内部联接和简单联接之间是不是有任何性能差异? [复制]

如何使用内部联接创建触发器

使用内部联接删除 DB2