首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

【活躍論壇氣氛】之數據庫,该怎么解决

2012-02-11 
【活躍論壇氣氛】之數據庫先發一些我平時遇到的問題和筆記,希望能對各位有幫助。先發3個條目,太長了也不好,看

【活躍論壇氣氛】之數據庫
先發一些我平時遇到的問題和筆記,希望能對各位有幫助。先發3個條目,太長了也不好,看效果如何?或者有什么建議,可以提出來,后續就可采納。錯誤之處,請見諒并指正。謝謝!

  1、一些常見的SQL效能調整;

  2、由存儲過程(StoredProcedure)引發的 "无法解决 equal to 操作的排序规则冲突。"
  StoredProcedure中使用了暫存#TempTable
  Ex:
  Create Table #TempTable
  (Field01 varchar(10),
  Field02 varchar(20))

以上在繁體SQLServer中Field1 & Field2預設的COLLATE為Chinese_Taiwan_Stroke_CI_AS

在簡體SQLServer中Field1 & Field2預設的COLLATE則為Chinese_PRC_CI_AS

(這是因為暫存#TempTable預設的COLLATE為系統tempdb的COLLATE的關係,

且tempdb為系統數據庫,不允許使用Alter DataBase去變更COLLATE)

而於繁體數據庫中,所有的Table中char / varchar預設皆為Chinese_Taiwan_Stroke_CI_AS

如此只要Join了不同COLLATE的Field,

就會引發錯訊 "无法解决 equal to 操作的排序规则冲突。"


要解決上述的問題有以下3種方式:

  1)、 於Create Table #TempTable時,註明每個Field的COLLATE…

Ex: 

Create Table #TempTable

(Field01 varchar(10) COLLATE database_default,

 Field02 varchar(20) COLLATE database_default)

以上char / varchar皆註明COLLATE database_default,其中database_default的意義為

告訴SQLServer說,這個#TempTable的COLLATE請參照目前連結的DB,而不要去參照tempdb



Create Table #TempTable

(Field01 varchar(10) COLLATE Chinese_Taiwan_Stroke_CI_AS,

Field02 varchar(20) COLLATE Chinese_Taiwan_Stroke_CI_AS)

以上char / varchar皆註明特定的COLLATE,以確保 #TempTable的COLLATE

和我們DB中Table的COLLATE保持一致,而不要再去參照tempdb

2)、 在Join實體Table與#TempTable時註明COLLATE為何

Ex:

Select * From Table1 t1, #TempTable t2

Where t1.Field01 = t2.Field01

Collate Chinese_Taiwan_Stroke_CI_AS -- 在Select的最後註明要使用的COLLATE為何

3)、 繁體的SQLServer使用繁體的DB / 簡體的SQLServer使用簡體的DB,

不要交叉互相使用,也就是在SQLServer中固定使用與該SQLServer預設相同COLLATE的Table,也就是

在繁體的SQLServer中Create繁體用的DB後,再Create Table & Field,

如此預設所有Field的COLLATE就會是Chinese_Taiwan_Stroke_CI_AS

而在簡體的SQLServer中Create簡體用的DB後,再Create Table & Field,

如此預設所有Field的COLLATE就會是Chinese_PRC_CI_AS


  3、“...WHILE ATTEMPTING TO OPEN OR CREATE...”,數據庫創建失敗問題
用程式創建一個sql server 資料庫時,出現了“...WHILE ATTEMPTING TO OPEN OR CREATE...”,資料庫創建失敗。看起來是沒有權限的關系。但是在studio里面是可以創建的。

後來查找sql configuration management (組態管理員),發現sql server 及sql agent登入身份都是networt service。據查資料,若系統服務netlogon沒有啟動的話,那么sql以這種身份登入,權限是無法被識別的。或是獨立型的服務器,采用這種方式登錄也不行。

解決方式是把登入身份改為本地帳戶(透過組態管理員)
 

[解决办法]
挺不错的,支持
[解决办法]
好,支持
。。
[解决办法]
go on ......
[解决办法]
楼主能不能换简体字啊?这样看着比较别扭。。。。呵呵~
[解决办法]
继续,楼主 支持
[解决办法]
感谢 分享。。。。。。。。。。
[解决办法]
真的很不错!!!!!!!!!!!!!感谢分享
[解决办法]
!!!!!!!感谢!!!!!!
[解决办法]
虽然不懂,支持楼主~~
[解决办法]
很不错,好好看看,学习学习。
[解决办法]
支持楼主。。。。。。。
[解决办法]
支持楼主,楼主是台湾人吗?


[解决办法]
学习了~多谢多谢~
继续~~~~~~~~~~~
[解决办法]
mark .


上次的MARK居然没提交上去 :(
[解决办法]
感谢楼主分享!!!!!!!!!!!!!!!
[解决办法]
支持,学习

回复内容太短了!
[解决办法]
挺不错的,支持!!!
[解决办法]
ding..........
[解决办法]
不错,有关于oracle的吗?
[解决办法]
关注。。。。。。。。。。。。。。
[解决办法]
谢谢楼主分享,顶了,楼主好人
[解决办法]
支持楼主。。。。。。。
[解决办法]
好东西哈。受用了!谢谢!
[解决办法]
真的很不错!!!!!!!!!!!!!感谢分享
[解决办法]
顶一个..............
收下了..........THANKS!!!!!
[解决办法]
收藏了·
 以后用的着
[解决办法]
挺不错的,支持挺不错的,支持
[解决办法]
挺不错的,支持挺不错的,支持
[解决办法]
真的很不错!!!!!!!!!!!!!感谢分享
[解决办法]
楼主是台湾的,怎么有繁体,

热点排行