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

Tsql 瑞典PC上的程序员是否可以编写涉及名为V和W的变量的T-SQL查询?,tsql,sql-server-2012,collation,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

我有这个视图源代码,写在一台带有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
如您所见,此代码依赖于表示两个不同表的表别名
W
V
。 当我尝试在具有排序规则Finnish_Swedish_CI_AI的数据库上执行该操作时,它失败了

Msg 207, Level 16, State 1, Procedure vwmna01HSQrptNoAccidentSince, Line 18
Invalid column name 'ID'
现在我已经完成了我的家庭作业,并且发现在瑞典的校勘中,字母V和W被认为是相等的。当我们用Z代替W时,它就起作用了

我的问题仍然是:

  • 这是一个bug,还是将这种排序规则应用于源代码本身(我知道它需要应用于字符串文本和数据)有什么用处
  • 有什么方法可以防止这种情况发生,比如某种SET指令或连接属性

编辑:它出现在SSMS查询窗口中,以及在代码中使用.NET SqlConnection中的OleDB执行时。如果我们将其作为
CREATE VIEW
语句的一部分执行,或者作为如上所示的特殊查询执行,则没有区别。

您的问题可能是区分大小写。检查您的表格是否有“ID”列-不要与“ID”错误。修正你的程序。

@lad2025有些相似,是的。但是:表名存储在sysobjects中,因此受排序规则的约束。像行源别名这样的纯源代码构造不应该出现。这就像你会发送一些C代码,比如
intv,w
给一位瑞典同事,他无法编译它。我在瑞典看到的大多数数据库都使用芬兰语(Finnish_Swedish_CI_),这不是问题。真的吗?也许我应该把这个移到language.stackexchange.com,v/w与重音敏感度有什么关系?别名使用当前数据库的排序规则。使用另一个排序规则从数据库执行脚本的工作方式将有所不同。e、 g.
使用master;选择。。。来自swedishdatabase..table1为v,swedishdatabase..table2为w
数据库排序规则为Finnish_Swedish_CI_AI(不区分大小写,不区分重音)。问题可以缩小到字母V和W的排序规则相等。是的,但服务器的排序规则可能区分大小写。原因已排除区分大小写。问题已经减少了两个测试用例:测试用例1:使用表别名V和W,结果:错误消息207;测试用例2:使用表别名V和Z,结果:OK。