2016-06-01 11 views
0

データベースとetlをMySQlからSQL Serverに移行しており、大文字と小文字の区別の問題が発生しました。 MySqlでは、私たちがロードしているアプリケーションの1つに、「Divh」や「divh」のようなコードがあります(私のやり方ではありません) すべてがうまくいっています。 etlの場所、クエリーの報告書などはすべて、作者が大文字と小文字を区別するために使用したものを使用しています。 つまり、MYSqlは大文字と小文字を区別しないDDLとSQLを持ちますが、大文字と小文字を区別することができます。SQL Server 2014大文字と小文字の区別の問題

これはSQL Serverが対応できないように見えます。私がCI照合を選択すると、すべてのテーブルとカラムがデータと一緒に(おそらくは)鈍感になります。 とその逆 - そのCSのすべてが大文字と小文字を区別している場合。 私はそれを正しく読んでいますか? もしそうなら、私はDB内のすべてのテキスト列の照合順序を変更するか、またはそれぞれのすべてのクエリを編集する必要があります( )。

皮肉なことに、最初のテストは、同じ照合(SQL_Latin1_General_CP1_CS_AS) で設定されたAzure SQLデータベースで、selectのテーブル名の大文字と小文字は区別されません。

アイデア?

おかげ JC

答えて

1

は、まず照合順序の設定は、SQL Server内のすべてのレベルで存在していることが、あなたを知っています。インスタンス、データベース、テーブル、偶数フィールドレベル。

データベースとDDLを大文字と小文字を区別しないままにして、影響を受けるフィールドの大文字と小文字を区別して照合する必要があるように思えます。

過去に使用した別のトリックは、さまざまなケース間でデータの比較を行いたいが、何の照合も変更する必要がない場合、値をVARBINARYデータ型にキャストすることです。例えば

:先端のための

DECLARE @Var1 VARCHAR(5) 
DECLARE @Var2 VARCHAR(5) 

SET @Var1 = 'Divh' 
SET @Var2 = 'divh' 

--Comparison1: 
IF @Var1 = @Var2 
    PRINT 'Same' 
ELSE 
    PRINT 'Not the same' 

--Comparison2: 
IF CAST(@Var1 AS VARBINARY) = CAST(@Var2 AS VARBINARY) 
    PRINT 'Same' 
ELSE 
    PRINT 'Not the same' 
+0

ポールのおかげ。はい、データベースの大文字小文字を区別しないようにしたいのですが、約200列は大文字と小文字を区別する必要があります。私はデータドメインを変更することによってこれを生成するモデリングツールを説得しようとしていますので、多くの列でリンクを解除する必要はありません。 – jc508

関連する問題