2017-09-01 14 views
0

データベースがアプリケーションから作成されると、デフォルトの照合が使用されます。データベース作成スクリプトで照合を渡す必要はありません。インスタンスレベルでのSQLサーバー照合の変更

クライアントには、大文字と小文字の区別が設定されたインスタンスレベルの照合が設定されています。したがって、私たちのアプリケーションのために作成されたデータベースは、私たちが望まないものである照合の中にあります。

インスタンスレベルで照合順序を変更して、作成されたデータベースが目的の照合順序を持つようにすることができます。インスタンスレベルでこれをどのように行うのですか?

ありがとうございました!

+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またはManagement Studioから)残りのデータベースを作成します。

これはアプリケーションの変更を必要としますが、テーブルはデータベース照合ではなくデータベースの照合をとるため、データベース自体の作成のみが必要です(すべてのクライアントで動作するようにすることもできますデータベースが存在し、その場合はDB作成をスキップし、残りのオブジェクトを処理します)。

最終的な警告として、照合順序がサーバー照合と異なるDBを使用すると、照合順序が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

1

変更する前にデータベースを削除する必要があるインスタンス照合を構成できます。 Here is a link to setting or changing the Server Collation.

これは、データベースレベルで行うこともできます。 Here is information on setting or changing collation on the database level.

the collation clauseも読んでください。これは、テーブル、列、追加のオプションの中のキャスティング式にも適用できます。

関連する問題