3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
可以在各種級(jí)別上設(shè)置排序規(guī)則:
服務(wù)器
數(shù)據(jù)庫(kù)
柱
因此,您可以在不區(qū)分大小寫(xiě)的數(shù)據(jù)庫(kù)中包含一個(gè)區(qū)分大小寫(xiě)的列。我還沒(méi)有遇到過(guò)可以針對(duì)單個(gè)數(shù)據(jù)列的大小寫(xiě)敏感性進(jìn)行業(yè)務(wù)案例研究的情況,但我想可能會(huì)這樣。
檢查服務(wù)器排序規(guī)則
SELECT SERVERPROPERTY('COLLATION')
檢查數(shù)據(jù)庫(kù)整理
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
檢查列排序規(guī)則
select table_name, column_name, collation_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = @table_name

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果使用默認(rèn)排序規(guī)則選項(xiàng)安裝了SQL Server,則可能會(huì)發(fā)現(xiàn)以下查詢(xún)返回相同的結(jié)果:
CREATE TABLE mytable
(
mycolumn VARCHAR(10)
)
GO
SET NOCOUNT ON
INSERT mytable VALUES('Case')
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
您可以通過(guò)在列級(jí)別強(qiáng)制排序規(guī)則來(lái)更改查詢(xún):
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'case'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case'
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'
SELECT DATABASEPROPERTYEX('<database name>', 'Collation')
由于更改此設(shè)置會(huì)影響應(yīng)用程序和SQL查詢(xún),因此我將首先隔離此測(cè)試。從SQL Server 2000,您可以輕松地運(yùn)行ALTER TABLE語(yǔ)句來(lái)更改特定列的排序順序,從而使其必須區(qū)分大小寫(xiě)。首先,執(zhí)行以下查詢(xún)以確定將其更改回的內(nèi)容:
EXEC sp_help 'mytable'
在默認(rèn)情況下,第二個(gè)記錄集應(yīng)包含以下信息:
Column_Name排序規(guī)則
mycolumn SQL_Latin1_General_CP1_CI_AS
無(wú)論“歸類(lèi)”列返回什么,現(xiàn)在您都知道在進(jìn)行以下更改后需要將其更改回什么,這將強(qiáng)制區(qū)分大小寫(xiě):
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE Latin1_General_CS_AS
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
如果這使事情變?cè)?,則只需發(fā)出新的ALTER TABLE語(yǔ)句即可將其改回(確保將我的COLLATE標(biāo)識(shí)符替換為之前找到的標(biāo)識(shí)符):
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE SQL_Latin1_General_CP1_CI_AS
如果您對(duì)SQL Server 7.0感到困惑,則可以嘗試以下解決方法,這可能會(huì)對(duì)性能造成一些影響(您應(yīng)該只為FIRST匹配項(xiàng)獲得結(jié)果):
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10))
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
SQL服務(wù)器確定由大小寫(xiě)COLLATION。
COLLATION 可以在不同的級(jí)別設(shè)置。
服務(wù)器級(jí)
數(shù)據(jù)庫(kù)級(jí)
列級(jí)
表達(dá)水平
這里是MSDN參考。
可以COLLATION按Raj More's答案中提到的在每個(gè)級(jí)別檢查。
檢查服務(wù)器排序規(guī)則
SELECT SERVERPROPERTY('COLLATION')
檢查數(shù)據(jù)庫(kù)整理
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
檢查列排序規(guī)則
select table_name, column_name, collation_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = @table_name
檢查表達(dá)式排序規(guī)則
對(duì)于表達(dá)式級(jí)別,COLLATION您需要查看表達(dá)式。:)
如下面的示例所示,它通常位于表達(dá)式的末尾。
SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;
歸類(lèi)說(shuō)明
為了獲得每個(gè)COLLATION值的描述,請(qǐng)嘗試此。
SELECT * FROM fn_helpcollations()
而且您應(yīng)該看到類(lèi)似這樣的內(nèi)容。
您總是可以放一個(gè)WHERE子句進(jìn)行過(guò)濾,并且只為您查看描述COLLATION。
您可以在此處找到歸類(lèi)列表。
- 3 回答
- 0 關(guān)注
- 808 瀏覽
添加回答
舉報(bào)