「ほぼ一致」でJOINを行う必要があります。これを説明する最良の方法は、例を使用することです。
CREATE TABLE Car
(
Vin int,
Make nvarchar(50),
ColorID int,
)
CREATE TABLE Color
(
ColorID int,
ColorCode nvarchar(10)
)
CREATE TABLE ColorName
(
ColorID int,
Languagecode varchar(12),
ColorName nvarchar(50)
)
INSERT INTO Color Values (1, 'RED CODE')
INSERT INTO Color Values (2, 'GREEN CODE')
INSERT INTO Color Values (3, 'BLUE CODE')
INSERT INTO ColorName Values (1, 'en', 'Red')
INSERT INTO ColorName Values (1, 'en-US', 'Red, my friend')
INSERT INTO ColorName Values (1, 'en-GB', 'Red, my dear')
INSERT INTO ColorName Values (1, 'en-AU', 'Red, mate')
INSERT INTO ColorName Values (1, 'fr', 'Rouge')
INSERT INTO ColorName Values (1, 'fr-BE', 'Rouge, mon ami')
INSERT INTO ColorName Values (1, 'fr-CA', 'Rouge, mon chum')
INSERT INTO Car Values (123, 'Honda', 1)
SPROC は次のようになります。
DECLARE @LanguageCode varchar(12) = 'en-US'
SELECT * FROM Car A
JOIN Color B ON (A.ColorID = B.ColorID)
LEFT JOIN ColorName C ON (B.ColorID = C.ColorID AND C.LanguageCode = @LanguageCode)
http://sqlfiddle.com/#!6/ac24d/24を参照してください(Jake に感謝します!)
ここに課題があります。SPROC パラメーター @LanguageCode が完全に一致する場合、すべて問題ありません。
部分一致でも機能するようにしたいと思います。より具体的には、たとえば、@LanguageCode が「en-NZ」であるとすると、SPROC が言語コード「en」の値を返すようにします (「en-NZ」の値がないため)。
追加の課題として、一致するものがまったくない場合は、「en」値を返したいと思います。たとえば、@LanguageCode が 'es' の場合、SPROC は 'en' 値を返します ('es' の値がないため)。