SQLServer排序規則知識總結

2021-10-09 00:25:25 字數 4303 閱讀 2829

2.3. 修改資料庫排序規則

2.4. 修改表排序規則

--檢視伺服器排序規則(安裝時指定的排序規則)

select serverproperty(

'collation'

)as servercollation,

databasepropertyex(

'tempdb'

,'collation'

)as tempdbcollation,

databasepropertyex(db_name(),

'collation'

)as currentdbcollation;

--檢視資料庫排序規則

use master;

goselect name, collation_name

from sys.

databases

;--當前資料庫是否大小寫敏感

select

case

when n'a'

=n'a'

then n'不敏感'

else n'敏感'

end

select serverproperty(

'collation'

);

select @@version

net stop mssqlserver
setup /quiet /action=rebuilddatabase /instancename=mssqlserver /sqlsysadminaccounts=作業系統管理員賬號 /sapwd=密碼 /sqlcollation=latin1_general_ci_as
setup /quiet

/action=rebuilddatabase

/instancename=instancename

/sqlsysadminaccounts=accounts

/ [ sapwd= strongpassword ]

/sqlcollation=collationname

net start mssqlserver
use

[master]

goalter

database

[tztooldb]

set single_user with

rollback immediate

goalter

database

[tztooldb]

collate latin1_general_ci_as

gouse

[master]

goalter

database

[tztooldb]

set multi_user with

rollback immediate

go

use

[master];go

alter

database 資料庫名 set single_user with

rollback immediate;

gouse 資料庫名;

godeclare

@collate nvarchar(50)

= n'latin1_general_ci_as'

;--排序規則名

declare

@table nvarchar(

128)

;--迴圈item表名

declare

@column nvarchar(

128)

;--迴圈item欄位名

declare

@type nvarchar(

128)

;--對應欄位的型別,char、nchar、varchar、nvarchar等

declare

@typelenght nvarchar(

128)

;--對應型別的長度,nchar、nvarchar需要將數值除於2

declare

@sql nvarchar(max)

;--要拼接執行的sql語句

setrowcount0;

select

null mykey, c.name, t.name as

[table

], c.name as

[column

], c.collation_name as

[collation]

, type_name(c.system_type_id)

as[typename]

, c.max_length as

[typelength]

into

#temp

from sys.

columns c

right

join sys.

tables t on c.object_id = t.object_id

where c.collation_name is

notnull

;-- and t.name = 'syslog'

-- and type_name(c.system_type_id) = 'nvarchar';

setrowcount1;

update

#temp

set mykey =1;

while @@rowcount

>

0begin

setrowcount0;

--每次查詢第一條記錄並賦值到對應變數中

select

@table=[

table],

@column=[

column],

@type

= typename,

@typelenght

= typelength

from

#temp

where mykey =1;

--nchar、nvarchar需要將數值除於2

ifconvert

(int

,@typelenght

)>

0and

(@type

='nvarchar'

or@type

='nchar'

)begin

set@typelenght

=convert

(nvarchar(

128)

,convert

(int

,@typelenght)/

2);end;if

@typelenght

='-1'

begin

set@typelenght

= n'max'

;end

;--拼接sql,注意表名、欄位名要帶,避免group等關鍵字

set@sql

= n' alter table ['

+@table

+ n'] alter column ['

+@column

+ n'] '

+@type

+ n'('

+@typelenght

+ n') collate '

+@collate

;--try執行

begin try

exec

(@sql);

end try

--catch查詢異常結果

begin catch

select

@sql

as[asl]

, error_message(

)as msg;

end catch;

delete

#temp

where mykey =1;

setrowcount1;

update

#temp

set mykey =1;

end;

setrowcount0;

drop

table

#temp;

use[master];go

alter

database 資料庫名 set multi_user with

rollback immediate;

go

sql server 排序規則

sql server 排序規則 檢視伺服器的排序規則 select serverproperty n collation select serverproperty collation chinese prc ci as 修改資料庫的排序規則 alter database tempdb collat...

SQL server 排序規則

排序規則名稱由兩部份構成,前半部份是指本排序規則所支援的字符集。如 chinese prc cs ai ws 前半部份 指unicode字符集,chinese prc 指針對大陸簡體字unicode的排序規則。排序規則的後半部份即字尾 含義 bin 二進位制排序 ci cs 是否區分大小寫,ci不區...

SQL SERVER 強制排序規則查詢

有時會需要在2個db之間的資料做比較,但因為一些原因,資料庫的預設排序規則是不一樣的,例如 select a.col1,b.col1,a.from db1.dbo.a left join db2.dbo.b on a.code b.code where 1 1 order by a.col2 則會報...