2017-09-01 43 views
0

當從我們的應用程序創建數據庫時,它將採用默認歸類。我們不想在創建數據庫腳本中傳遞排序規則。實例級別上的SQL Server歸類更改

客戶端在區分大小寫的實例級別上設置了排序規則。所以爲我們的應用程序創建的數據庫就是這種排序規則,這是我們不想要的。

他們是否可以更改實例級別的排序規則,以便創建的數據庫將具有所需的排序規則,並且可以將其更改回任何他們想要的內容?我們如何在實例級別執行此操作?

謝謝你的時間!

+1

您不希望更改實例默認排序規則。這是超級醜陋的。 https://docs.microsoft.com/en-us/sql/relational-databases/collat​​ions/set-or-change-the-server-collat​​ion爲什麼不能在創建數據庫時說明你想要的排序規則?這是處理它的最好方式。 –

+0

更改實例排序規則實際上是SQL Server的卸載和重新安裝,指定您的應用程序在「CREATE DATABASE」腳本中需要的排序規則有哪些問題? –

+0

你的問題對我來說不是很清楚..你可以在數據庫級別以及服務器級別(實例)更改排序規則..但是如果更改測試將會產生一些副作用 – TheGameiswar

回答

1

所以問題是數據庫不是由在SQL Management Studio中運行的腳本創建的,而是從應用程序內部啓動的腳本創建的。

正如在註釋中提到的,另一個解決方案是改變服務器排序規則,但是多毛,在這種情況下,最好的選擇是創建數據庫爲空,更改排序規則(使用ALTER DATABASE或管理工作室),然後創建數據庫的其餘部分。

這將需要更改應用程序,但只需要創建數據庫本身,因爲這些表將採用數據庫的排序規則,而不是服務器排序規則(並且您可以以適用於每個客戶端的方式進行檢查,檢查如果數據庫存在,並且該案例跳過數據庫創建並繼續其餘對象)。

作爲最後的警告,請注意,使用不同於服務器排序規則的排序規則的數據庫將意味着比數據庫排序規則不同於tempdb,因此如果使用臨時表,那麼如果您有WHERE' s或JOIN的混合時間表和常規表。例如,假設SerialNumber是char列,該查詢將失敗,整理錯誤:

SELECT * 
FROM Products 
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber 

如果這種情況下,你將不得不修改應用程序,並更改查詢是這樣的:

SELECT * 
FROM Products 
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber COLLATE database_default 
+0

太好了。謝謝.. – Rainmaker