、そしてちょうど大文字と小文字を区別すること(とそれが参照するキーが同じ照合順序を使用していることを確認してください)する列を設定します。マイケルの答えから照合を借りて:あなたは、同じ列に対するクエリは、大文字と小文字を区別したい場合は
USE tempdb;
GO
CREATE TABLE dbo.foo
(
[key] VARCHAR(32) COLLATE SQL_Latin1_General_CP1_CS_AS
PRIMARY KEY
);
CREATE TABLE dbo.bar
(
[key] VARCHAR(32) COLLATE SQL_Latin1_General_CP1_CS_AS
FOREIGN KEY REFERENCES dbo.foo([key])
);
INSERT dbo.foo SELECT 'Bob';
INSERT dbo.foo SELECT 'bOB';
INSERT dbo.foo SELECT 'BOB';
GO
-- fails:
INSERT dbo.bar SELECT 'bob';
GO
-- succeeds:
INSERT dbo.bar SELECT 'Bob';
GO
して、あなただけの(それが_CI_
代わりの_CS_
が含まれています注意してください)COLLATE句を指定することができます。
SELECT COUNT(*) FROM dbo.foo
WHERE [key] = 'Bob';
----
1
SELECT COUNT(*) FROM dbo.foo
WHERE [key] COLLATE SQL_Latin1_General_CP1_CI_AS = 'Bob';
----
3
いいえ、dbの大文字と小文字の区別を知っているからではありませんが、感受性を変えることができるかどうかを知りたいのですが(dbとforeignキーの両方) – david99world
あなたは以下の答えに質問し、 。私はとにかく答えるでしょう:あなたの 'WHERE'節が鍵を伴わない限り、鍵に対する大文字と小文字の区別はありますが、他のデータとのwhere節はできません。キー列の大文字と小文字を区別した照合を設定し、残りのデータは大文字小文字を区別しないままにします。キーを含む節が大文字と小文字の区別を気にしないようにするには(WHERE key COLLATE <いくつかの大文字小文字を区別しない照合> LIKE '%foo%'; ' –
@Siva Iあなたの質問を理解していない。異なる照合順序で異なる列を記述する2つの異なるWHERE句?またはWHERE col_in_collation_A = col_in_collation_B?照合の競合と同様に、それに対処する必要があります。任意の列または式に特定の照合順序で解釈させることができます。 –