Sql server SQL Server';无效列';对临时表的SELECT查询-区分大小写问题
我有一个案例,我对SQL Server配置没有任何控制权 以下是我的配置:Sql server SQL Server';无效列';对临时表的SELECT查询-区分大小写问题,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我有一个案例,我对SQL Server配置没有任何控制权 以下是我的配置: SQL Server 2008 SQL Server实例排序规则:Latin_General_BIN(我知道它区分大小写) 给定的数据库(不区分大小写…SQL\u Latin1\u General\u CP1\u CI\u AS) 以下是我想要的场景。。。如有可能: 给定的 何时 然后 列名“field1”无效 有没有办法让这一切顺利进行 我知道这是没有人会想要的,但是因为我在客户端被这种配置所困扰,而且我们有很多在
- SQL Server 2008
- SQL Server实例排序规则:Latin_General_BIN(我知道它区分大小写)
- 给定的数据库(不区分大小写…SQL\u Latin1\u General\u CP1\u CI\u AS)
CREATE TABLE #test (Field1 nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS);
INSERT INTO #test
VALUES ('test'),('TEST'),('Test')
SELECT field1 FROM #test --should fail
SELECT Field1 FROM #test WHERE Field1 = 'tEst' --should work
另一个原因是存储过程而不是代码中的查询。这将破坏区分大小写的排序规则中的唯一名称。在区分大小写的排序规则中,可以将field1、field1和field1放在同一个表中。它们甚至可以是相同或不同的数据类型。换句话说,您尝试执行的操作是不可能的。对于安装了区分大小写排序规则的SQL Server,您唯一的选择是确保对临时表的所有引用都正确区分大小写。如果您没有选择使用不同的不区分大小写排序规则重新安装SQL Server实例,或者安装新的不区分大小写实例,那么您就没有选择,只能确保所有SQL引用表和列的大小写都正确。很抱歉这是一个好习惯。不,如果有机会,那么将数据库移动到与数据库具有相同排序规则的服务器实例。不同的排序总是让人头疼。。。
SELECT field1 FROM #test; /*Notice the lower case on field1*/
CREATE TABLE #test (Field1 nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS);
INSERT INTO #test
VALUES ('test'),('TEST'),('Test')
SELECT field1 FROM #test --should fail
SELECT Field1 FROM #test WHERE Field1 = 'tEst' --should work