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 則會報...