第一種:
ALTERTABLEtb--(指定某表的某列)
ALTERCOLUMNcolnamenvarchar(100)COLLATEChinese_PRC_CI_AS--不區分大小寫
ALTERTABLEtb--(指定某表的某列)
ALTERCOLUMNcolnamenvarchar(100)COLLATEChinese_PRC_CS_AS--區分大小寫
alterdatabase資料庫COLLATEChinese_PRC_CS_AS--(指定整個資料庫)
第二種:
--創建如下用戶自定義函數(UDF)
CREATEFUNCTIONStrComp(@Str1VARCHAR(50),@Str2VARCHAR(50))
--ALTERFUNCTIONStrComp(@Str1VARCHAR(50),@Str2VARCHAR(50))
RETURNSINTEGER
AS
BEGIN
DECLARE@iINTEGER
--DECLARE@Str1VARCHAR(50)
--DECLARE@Str2VARCHAR(50)
DECLARE@yINT
--SET@Str1='a'
--SET@Str2='A'
SET@i=0
--SELECTASCII(SUBSTRING(@Str1,@i+1,1))
SET@y=1
DECLARE@iLenINT
SET@iLen=LEN(LTRIM(RTRIM(@Str1)))
IFLEN(LTRIM(RTRIM(@Str1)))<LEN(LTRIM(RTRIM(@Str2)))--THEN
SET@iLen=LEN(LTRIM(RTRIM(@Str2)))
WHILE(@i<@iLen)
BEGIN
IF(ASCII(SUBSTRING(@Str1,@i+1,1))=ASCII(SUBSTRING(@Str2,@i+1,1)))--THEN
SET@i=@i+1
ELSE
BEGIN
SET@y=0
BREAK
END
END
RETURN@y
END
測試:
select*
fromTable1
Wheredbo.StrComp(Field1,'aAbB')=1
第三種:
SQL Server 資料庫中的文本信息可以用大寫字母、小寫字母或二者的組合進行存儲。例如,姓氏可以"SMITH"、"Smith"或"smith"等形式出現。
資料庫是否區分大小寫取決於 SQL Server 的安裝方式。如果資料庫區分大小寫,當搜索文本數據時,必須用正確的大小寫字母組合構造搜索條件。例如,如果搜索名字"Smith",則不能使用搜索條件"=smith"或"=SMITH"。
另外,如果伺服器被安裝成區分大小寫,則必須用正確的大小寫字母組合提供資料庫、所有者、表和列的名稱。如果提供的名稱大小寫不匹配,則 SQL Server 返回錯誤,報告"無效的對象名"。
當使用關系圖窗格和網格窗格創建查詢時,查詢設計器始終正確地反映出伺服器是否區分大小寫。但是,如果在 SQL 窗格中輸入查詢,則必須注意使名稱與伺服器解釋名稱的方式相匹配。
如果伺服器是用不區分大小寫的選項安裝的,則
提示 若要確定伺服器是否區分大小寫,請執行存儲過程 sp_server_info,然後檢查第 18 行的內容。如果伺服器是用不區分大小寫的設置安裝的,則 sort_order 選項將設置為"不區分大小寫"。可以從查詢分析器運行存儲過程。
第四種:
select*fromserverswhereconvert(varbinary,name)=convert(varbinary,N'RoCKEY')
第五種:
ascii('a')再配合Substring()一起用
⑵ 更改SQL Server 2012 資料庫排序規則
針對市面上有部份應用系統或者ERP系統對於資料庫的排序規則是有要求,若安裝資料庫時沒有留意,採用默認安裝後,導致應用打開出現異常或者亂碼現象。其實不用再卸載重裝,通過如下步驟進行更改,節省大量的時間:
1、先停止需要變更 sqlserver 的服務 : 在 運行命令行中 services.msc 命令,在打開的服界面打到並關閉sql server 的服務;(直接通過 Net stop mssqlserver 語句也可以關閉SQL Server 後台服務)
2、執行命令:(cmd命令行)
F:>Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=administrator /SAPWD=****** /SQLCOLLATION=Chinese_PRC_BIN
參數介紹:
InstanceName : MSSQLSERVER 默認為:MSSQLSERVER
SQLSYSADMINACCOUNTS: administrator 默認為:administrator
StrongPassword : sa賬號的密碼
CollationName : Chinese_PRC_BIN (根據實際情況需要填寫)
F:>setup為安裝文件存放路徑;
3、等幾分鍾。出現成功提示
4、執行命令 Net start mssqlserver 啟動 SqlServer
5、原有各個資料庫會被移出,需要手動進行「附加資料庫」資料庫操作
⑶ 怎樣修改sqlserver2005系統資料庫排序規則
首先要知道資料庫排序規則的含義,如Chinese_PRC_CI_AS就可以不區分大小寫了,下面為Chinese_PRC打頭的規則:
_BIN
二進制排序
_CI_AI
不區分大小寫、不區分重音、不區分假名類型、不區分全半形
_CI_AI_WS
不區分大小寫、不區分重音、不區分假名類型、區分全半形
_CI_AI_KS
不區分大小寫、不區分重音、區分假名類型、不區分全半形
_CI_AI_KS_WS
不區分大小寫、不區分重音、區分假名類型、區分全半形
_CI_AS
不區分大小寫、區分重音、不區分假名類型、不區分全半形
_CI_AS_WS
不區分大小寫、區分重音、不區分假名類型、區分全半形
_CI_AS_KS
不區分大小寫、區分重音、區分假名類型、不區分全半形
_CI_AS_KS_WS
不區分大小寫、區分重音、區分假名類型、區分全半形
_CS_AI
區分大小寫、不區分重音、不區分假名類型、不區分全半形
_CS_AI_WS
區分大小寫、不區分重音、不區分假名類型、區分全半形
_CS_AI_KS
區分大小寫、不區分重音、區分假名類型、不區分全半形
_CS_AI_KS_WS
區分大小寫、不區分重音、區分假名類型、區分全半形
_CS_AS
區分大小寫、區分重音、不區分假名類型、不區分全半形
_CS_AS_WS
區分大小寫、區分重音、不區分假名類型、區分全半形
_CS_AS_KS
區分大小寫、區分重音、區分假名類型、不區分全半形
_CS_AS_KS_WS
區分大小寫、區分重音、區分假名類型、區分全半形
如需要對資料庫重新進行規則設定,具體步驟如下:
1、找到sql2005
的安裝包
2、執行下面的批處理,指定某種規則,如Chinese_PRC_CI_AS
內容如下:
cd
D:\SQL
Server
2005\SQL
Server
x86\Servers
start
/wait
setup.exe
/qb
INSTANCENAME=MSSQLSERVER
REINSTALL=SQL_Engine
REBUILDDATABASE=1
SAPWD=sa
SQLCOLLATION=Chinese_PRC_CI_AS
3、重新附加一下資料庫就發現排序規則變更了。
⑷ SQLServer表的大小與表占硬碟空間大小有什麼區別,應該怎麼去查這兩項性能
表的大小一般指表的行數,佔用硬碟空間大小就比較復雜了,可以有以下幾個參數:
分配空間,數據佔用空間及索引佔用空間。
執行
EXEC alltablecount
即可顯示當前資料庫所有表資源佔用情況。
執行前,請前建立以下表,和兩個存儲過程:
1、先建立表:HY_SPACE
CREATE TABLE [HY_SPACE] (
[name] [nvarchar] (128) COLLATE Chinese_PRC_CI_AS NULL ,
[rows] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
[reserved] [varchar] (18) COLLATE Chinese_PRC_CI_AS NULL ,
[data] [varchar] (18) COLLATE Chinese_PRC_CI_AS NULL ,
[index_size] [varchar] (18) COLLATE Chinese_PRC_CI_AS NULL ,
[unused] [varchar] (18) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
2、建立統計存儲過程:
create procere HYspaceused
@objname nvarchar(776) = null,
@updateusage varchar(5) = false
as
declare @idint
declare @typecharacter(2)
declare@pagesint
declare @dbname sysname
declare @dbsize dec(15,0)
declare @logsize dec(15)
declare @bytesperpagedec(15,0)
declare @pagesperMBdec(15,0)
create table #spt_space
(
rowsint null,
reserveddec(15) null,
datadec(15) null,
indexpdec(15) null,
unuseddec(15) null
)
if @updateusage is not null
begin
select @updateusage=lower(@updateusage)
if @updateusage not in ('true','false')
begin
raiserror(15143,-1,-1,@updateusage)
return(1)
end
end
if @objname IS NOT NULL
begin
select @dbname = parsename(@objname, 3)
if @dbname is not null and @dbname <> db_name()
begin
raiserror(15250,-1,-1)
return (1)
end
if @dbname is null
select @dbname = db_name()
select @id = null
select @id = id, @type = xtype
from sysobjects
where id = object_id(@objname)
if @id is null
begin
raiserror(15009,-1,-1,@objname,@dbname)
return (1)
end
if not exists (select * from sysindexes
where @id = id and indid < 2)
if @type in ('P ','D ','R ','TR','C ','RF')
begin
raiserror(15234,-1,-1)
return (1)
end
else if @type = 'V '
begin
raiserror(15235,-1,-1)
return (1)
end
else if @type in ('PK','UQ')
begin
raiserror(15064,-1,-1)
return (1)
end
else if @type = 'F '
begin
raiserror(15275,-1,-1)
return (1)
end
end
if @updateusage = 'true'
begin
if @objname is null
dbcc updateusage(0) with no_infomsgs
else
dbcc updateusage(0,@objname) with no_infomsgs
print ' '
end
set nocount on
if @id is null
begin
select @dbsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 = 0)
select @logsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 <> 0)
select @bytesperpage = low
from master.dbo.spt_values
where number = 1
and type = 'E'
select @pagesperMB = 1048576 / @bytesperpage
select database_name = db_name(),
database_size =
ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB'),
'unallocated space' =
ltrim(str((@dbsize -
(select sum(convert(dec(15),reserved))
from sysindexes
where indid in (0, 1, 255)
)) / @pagesperMB,15,2)+ ' MB')
print ' '
insert into #spt_space (reserved)
select sum(convert(dec(15),reserved))
from sysindexes
where indid in (0, 1, 255)
select @pages = sum(convert(dec(15),dpages))
from sysindexes
where indid < 2
select @pages = @pages + isnull(sum(convert(dec(15),used)), 0)
from sysindexes
where indid = 255
update #spt_space
set data = @pages
update #spt_space
set indexp = (select sum(convert(dec(15),used))
from sysindexes
where indid in (0, 1, 255))
- data
update #spt_space
set unused = reserved
- (select sum(convert(dec(15),used))
from sysindexes
where indid in (0, 1, 255))
select reserved = ltrim(str(reserved * d.low / 1024.,15,0) +
' ' + 'KB'),
data = ltrim(str(data * d.low / 1024.,15,0) +
' ' + 'KB'),
index_size = ltrim(str(indexp * d.low / 1024.,15,0) +
' ' + 'KB'),
unused = ltrim(str(unused * d.low / 1024.,15,0) +
' ' + 'KB')
from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
end
else
begin
insert into #spt_space (reserved)
select sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id
select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
- data
update #spt_space
set unused = reserved
- (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
INSERT INTO HY_SPACE
select name = object_name(@id),
rows = convert(char(11), rows),
reserved = ltrim(str(reserved * d.low / 1024.,15,0) +
' ' + 'KB'),
data = ltrim(str(data * d.low / 1024.,15,0) +
' ' + 'KB'),
index_size = ltrim(str(indexp * d.low / 1024.,15,0) +
' ' + 'KB'),
unused = ltrim(str(unused * d.low / 1024.,15,0) +
' ' + 'KB')
from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
RETURN
end
return (0)
GO
3、主存儲過程
create procere alltablecount as
declare @name varchar(100)
TRUNCATE TABLE HY_SPACE
declare tablecur cursor for select name from sysobjects where xtype= 'u '
create table #tablecount(tablename varchar(100),reccount int)
open tablecur
fetch next from tablecur into @name
while @@fetch_status!=-1
begin
exec ('insert into #tablecount select tablename='''+@name+''',reccount=count(1) from '+@name+' ')
EXEC HYspaceused @NAME
fetch next from tablecur into @name
end
close tablecur
deallocate tablecur
select * from #tablecount order by reccount desc
select * from HY_SPACE
GO