瑞典PC上的程序员是否可以编写涉及名为V和W的变量的T-SQL查询?

时间:2016-05-19 12:14:30

标签: tsql sql-server-2012 collation

我有这个视图源代码,写在一台带有SQL Server 2012和Latin1服务器和数据库整理的机器上:

SELECT TOP 100 PERCENT
  W.AbteilungsNr AS Bereichsnummer,
  W.LongCap AS Bereichsname,
  convert(datetime,convert(varchar(10),(SELECT MAX(V.ZeitVon) FROM mna01HSQVorfallsmeldungen V INNER JOIN mna01HSQProtokolle P ON P.[ID]=V.ProtokollID WHERE P.WS_Bereich_ID=W.[ID] AND P.Category=4 AND V.ProposedCat IN (41)),104),104) AS DatumLetzterMTC,
  convert(datetime,convert(varchar(10),(SELECT MAX(V.ZeitVon) FROM mna01HSQVorfallsmeldungen V INNER JOIN mna01HSQProtokolle P ON P.[ID]=V.ProtokollID WHERE P.WS_Bereich_ID=W.[ID] AND P.Category=4 AND V.ProposedCat IN (40)),104),104) AS DatumLetzterRWC,
  convert(datetime,convert(varchar(10),(SELECT MAX(V.ZeitVon) FROM mna01HSQVorfallsmeldungen V INNER JOIN mna01HSQProtokolle P ON P.[ID]=V.ProtokollID WHERE P.WS_Bereich_ID=W.[ID] AND P.Category=4 AND V.ProposedCat IN (42,44)),104),104) AS DatumLetzterLTI,
  convert(datetime,convert(varchar(10),(SELECT MAX(V.ZeitVon) FROM mna01HSQVorfallsmeldungen V INNER JOIN mna01HSQProtokolle P ON P.[ID]=V.ProtokollID WHERE P.WS_Bereich_ID=W.[ID] AND P.Category=4 AND V.ProposedCat IN (40,41,42,44)),104),104) AS DatumLetzterUnfall,
  DATEDIFF(day,(SELECT MAX(V.ZeitVon) FROM mna01HSQVorfallsmeldungen V INNER JOIN mna01HSQProtokolle P ON P.[ID]=V.ProtokollID WHERE P.WS_Bereich_ID=W.[ID] AND P.Category=4 AND V.ProposedCat IN (40,41,42,44)),GETDATE()) AS TageUnfallfrei
FROM mna01HSQWerksstruktur W
WHERE W.objType=1
AND W.Reportable=1
ORDER BY 
  W.AbteilungsNr ASC

如您所见,此代码依赖于表示两个不同表的表别名WV。 当我尝试在具有排序规则Finnish_Swedish_CI_AI的数据库上执行该操作时,它将失败并显示

Msg 207, Level 16, State 1, Procedure vwmna01HSQrptNoAccidentSince, Line 18
Invalid column name 'ID'

现在我已经完成了我的作业并且发现,在瑞典校对中,字母V和W被认为是相同的。当我们使用Z而不是W时,它可以工作。

我的问题仍然存在:

  • 这是一个错误,还是有任何使用这个排序规则应用于源代码(我知道它需要应用于字符串文字和数据)
  • 有没有办法防止这种情况发生,某种SET指令或连接属性?

编辑:它发生在SSMS查询窗口中以及在代码中使用来自.NET SqlConnection的OleDB执行时。如果我们将它作为CREATE VIEW语句的一部分执行,或作为如上所示的即席查询执行,则没有任何区别。

1 个答案:

答案 0 :(得分:0)

你的问题可能是敏感的情况。检查您的表是否有“ID”列 - 不要误认为“Id”。修复你的程序。