MSSQL插入/更新文字乱码问题

2008-08-02 00:57 星期六
向MSSQL中 NCHAR 字段插入內容時,由于簡/繁 或其他文字編碼問題,導致亂碼出現
可以在NCHAR 字段的內容前加 N 解決,
如原SQL(有亂碼):
INSERT [sto01] ( [MA_NO] , [MA_NE] ) VALUES ( 'P9-11110-1000-A0' , '顺风順水')

修正后的SQL(無亂碼):
INSERT [sto01] ( [MA_NO] , [MA_NE] ) VALUES ( 'P9-11110-1000-A0' , N'顺风順水')

查询MSSQL数据表信息的脚本

2008-07-29 03:18 星期二
用MYSQL时,从PHPMYADMIN或其他工具上能方便的看到每个数据表的记录数,使用空间等资料,
在MSSQL管理工具上好像都没有,用下面这个脚本可以查询出来:


exec sp_MSForEachTable
@precommand=N'
create table ##(
id int identity,
表名 sysname,
字段数 int,
记录数 int,
保留空间 Nvarchar(10),
使用空间 varchar(10),
索引使用空间 varchar(10),
未用空间 varchar(10))',
@command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?''
update ## set 字段数=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()',
@postcommand=N'select * from ## order by 表名 drop table ##'

压缩MSSQL数据库文件的方法

2008-07-29 02:59 星期二
1.
MSSQL2000数据库
可以从企业管理器中,选定数据库,在右键菜单中选择 所有任务->收缩数据库,然后依次点 收缩文件->文件(F),分别选择 DB_DATA和 DB_LOG,然后选择下面的 收缩操作->收缩文件至 ,填入可收缩的最小值。
上述操作可重复执行,直至DB_DATA和 DB_LOG都不能收缩为止。

有时候可能会发现执行上述操作后,数据库文件并没有改变大小,这时,你需要检查资料库的属性页中,选项->故障还原,是否选择的是 简单 。



2.
用MSSQL2005的SQL Server Management Studio 执行压缩好像不起作用,LOG档大小还是没有变,但是用下面的方法可以压缩数据库文件的大小。
执行以下两条语句:
BACKUP LOG your_db_name WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (your_db_name)


说明:
刪除并壓縮SQL Server 交易紀錄檔,以下語法適用於 MSSQL 系列的資料庫

清除記錄檔
BACKUP LOG your_db_name WITH TRUNCATE_ONLY
但是在 MSSQL 7.0 以上時,清除 LOG 並不代表實體檔案大小會自動縮小,它只是把LOG 檔中片段的未使用空間全部擠到最後面,就有點像磁碟整理工具那樣,如果要LOG 檔將未使用空間釋放給作業系統,那還得下一個指令

壓縮資料實體檔
DBCC SHRINKDATABASE (your_db_name)
這個壓縮資料實體檔的指令,會把資料檔(*.mdf)與交易記錄檔(*.ldf)中的未使用空間都釋放掉,由檔案總管看到的檔案大小才會真的變小!另外,即使不限制 LOG 成長的大小,有一天還是會爆掉,我曾經遇過 LOG 檔大到 2 GB,然後就無法再成長。如果不想要自己每次都下指令去清 LOG 的話,就把上述兩個指令放到工作排程,定期執行就好了!