Han*_*hel 5 sql-server query collation t-sql sql-server-2012
我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS
我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_AS
在WHERE
子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?
Create Table #tmpTest
(
id int primary key identity(1,1),
name varchar(100)
)
Insert Into #tmpTest values ('TestQuery'),('TESTQUERY'),('TEstquerY')
Select * from #tmpTest
Where name = 'TestQuery'
Select * from #tmpTest
Where name = 'TestQuery'
Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)
我在 where 子句中使用 Collate SQL_Latin1_General_Cp1_CS_AS来强制区分大小写。此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?
在查询中指定的关键字COLLATE
/选项仅适用于它所附加的谓词或表达式。意思是,这不仅适用于查询,而且仅适用于查询的一部分,而不是整个查询。因此,如果您在WHERE
子句中添加更多谓词,它们将不会受到您当前使用的影响COLLATE
。例如:
WHERE name = 'TestQuery' COLLATE SQL_Latin1_General_CP1_CS_AS
AND other_column = 'other value' -- uses collation of "other_column" column
AND another_column = 'another value' COLLATE Latin1_General_100_BIN2
AND @some_variable = 'literal' -- uses default collation of database
Run Code Online (Sandbox Code Playgroud)
更改列排序规则的唯一方法(SQL Server 中没有表级排序规则)是使用语句ALTER TABLE ... ALTER COLUMN
。
归档时间: |
|
查看次数: |
1131 次 |
最近记录: |