3

サーバーによっては、TSQL コマンドで大文字と小文字が区別されることがわかりました (*) tableId

SELECT TableId FROM myTable

列の照合に応じて。SQL_Latin1_blablabla大文字と小文字が区別されないようLatin1_blablablaです。

だから私の最初の質問はなぜですか!!!

2 つ目は、データベース内の関連するすべての列のすべての照合順序を変更するための最も速いトリック (sp?) は何ですか?

編集:物事を非常に明確にするために:

SELECT tableId FROM myTable

その間、すべてのサーバーで作業します

SELECT TableId FROM myTable

SQL_Latin_blablabla照合のあるサーバーでのみ機能します。2 つの弦の違いに注目してください。ここではデータの照合についてではなく、この照合がコードの記述方法に与える影響について説明します。

(*) ここで、この「発見」後の私の心の状態を修飾するために、いくつかの追加の具体的な単語を使用できますが、それらはすべて成人向けです...

4

2 に答える 2

5

これは照合と呼ばれ、SQL Server が文字列の大文字と小文字を区別したり、アクセントを区別したりするかどうかを制御します (たとえば、è é à などを認識するか、ea などと同じように扱うか)。

これは機能であり、バグではありません!

次のコマンドを使用して、現在の照合順序を見つけることができます。

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

次のようなものが得られます。

Latin1_General_CI_AS

「CI」の意味: 大文字と小文字を区別しない - CS は大文字と小文字を区別することを意味します

「AS」の意味: アクセントを区別する (そして AI はアクセントを区別しない)

インストール時に SQL Server の標準照合を定義でき、作成するデータベースごとにそれをオーバーライドできます。

また、テーブルと列を簡単に作成し、各 VARCHAR フィールドに特定の照合を指定することもできます。

データベースの照合を変更するには、次のコマンドを使用できます。

ALTER DATABASE MyDatabase COLLATE <desired collation>

残念ながら、このコマンドが失敗する理由はたくさんあります...「スキーマにバインドされている」ものはすべて、照合順序の変更を妨げます。その場合、これらの「障害物」をすべて削除または無効にしてから再試行することしかできません。これはかなりの試練です。

たとえば「Latin1_General_CI_AS」を選択すると、テーブル名と列名の大文字と小文字が区別されなくなります。

データテーブル内の 1 つの列の照合を変更する場合は、次のコマンドを使用します。

ALTER TABLE Table1
  ALTER COLUMN Column1 VARCHAR(20)
    COLLATE Latin1_General_CS_AS  -- or whatever collation you want

マルク

于 2009-10-19T14:38:25.167 に答える
4

marc_s の続き

sys.objects、sys.columns などは、データベースの照合順序で列名とオブジェクト名を格納します。したがって、バイナリ照合とは、オブジェクト名がバイナリとして扱われることを意味します...

于 2009-10-19T14:43:21.783 に答える