2016-11-10 16 views
0

これは意味があることを望みます。ただ、同じファイルパス文字列に基づいて2つのテーブルを結合しようとしている:小文字/大文字の文字列を比較して2つのテーブルを結合しようとしています

SELECT DISTINCT (vdir_physicalPath) 
FROM dbo.ASPR_IisVdir --gets all distinct paths for the virtual directories 

--now I need to list only the records where the 'path' matches ANY of the rows from the results above; 
SELECT * 
FROM dbo.ASPR_FolderAcl 
WHERE UPPER(fullname) = ANY OF the rows above 

--notice that the strings are lowercase/uppercase plus vdir_physicalPath has an extra '/' 
--I tried to inner join but it didnt list me anything; something like: 
SELECT * 
FROM dbo.ASPR_FolderAcl acl 
INNER JOIN dbo.ASPR_IisVdir vdir 
    ON UPPER(acl.fullname) + '/' = UPPER(vdir.vdir_physicalPath) collate SQL_Latin1_General_CP1_CS_AS 
     -- 
     --when comparing should I use something like CHARINDEX(UPPER(fullname), vdir_physicalPath) > 0 

enter image description here

enter image description here

感謝 を最大

+0

を使用する代わりにスラッシュ/を使用しています。サンプルデータ、テーブル構造。ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

サンプルデータを入力する必要があります。あなたの参加がそれなしではうまくいかなかった理由を伝えることは不可能です。サンプルデータに基づいて期待される結果を表示すると、私たちにとってより簡単になります。 – scsimon

+0

すべての情報が追加されました。ありがとうございます – Max

答えて

3

なぜ単純な代わりSQL_Latin1_General_CP1_CI_ASとして大文字小文字を区別しない照合を使用SQL_Latin1_General_CP1_CS_AS? AFAIKを使用すると、UPPERを呼び出すことによって、あなたが支払っているわずかなパフォーマンス上のペナルティもなくなり、テーブル上のインデックスを引き続き使用することができます。

詳細はCollation and Unicode Supportをご覧ください。

これまでに提供された情報に基づいて、照合を切り替えても問題が発生した場合は、おそらくロジックに問題があるか、データにゼロ幅のスペースなどのgremlinsがある可能性があります。

0

使用SQL_Latin1_General_CP1_CS_ASとあなたのサンプルでは、​​あなたはあなたが私たちが細部のいくつかの種類を必要と知っている必要があります持っている限り多くのポイントでは、バックスラッシュ\

関連する問題