webForumDet fria alternativet

Default värde.

3 svar · 478 visningar · startad av Gladh

GladhMedlem sedan maj 20013 024 inlägg
#1

Nu kommer jag med en följd fråga på min gamla fråga angåend defaultvärden http://www.webforum.nu/showthread.php?t=163441.

Nu är det så att jag vill lösa detta även om jag gör en inner join.

Här har jag en artikel som även har artikelstatus som ligger i en tabell och där kan ju statusen ha olika namn beroend på språk, och om den inte hittar just mitt språk så vill jag att den tar defaultspråket.

DECLARE	@LCID int
SET @LCID = 1053

	SELECT t.Identifier, t.Number, t.Name, 
				t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
		FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier AND t1.lcid = @LCID
GO

Denna kod ger mig inga svar, eftersom det inte finns någon LCID som har värdet 1053, men det finns om jag ändrar till 1033, då får jag följande träffar.

8F4C29FB-F958-4BDE-853B-D91CD16D645B	0000123	Test article	A41E7BC5-D82D-44AE-A4CD-BD3BAA039F00	Prototype
AB65F153-6F20-4D7B-A0DA-E2927A18A3EB	1254689	Ebba	A804A6A4-2CFB-4232-9B5C-879B44AA7626	Active

Hur får jag samma resultat om jag inte vet om det finns något på 1053, men finns det något på 1053 så vill jag ha det och inte 1033...

- M

CatZMedlem sedan jan. 20022 341 inlägg
#2

Tillbaka till OR-satserna?

DECLARE	@LCID int
SET @LCID = 1053

	SELECT t.Identifier, t.Number, t.Name, 
				t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
		FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier ((AND t1.lcid = @LCID) OR (t1.lcid = 1033))
GO

Helt otestat iofs.

GladhMedlem sedan maj 20013 024 inlägg
#3

Nja, då kommer jag ju få 2 träffar om både 1033 och 1053 finns, det vill jag ju inte, så fall vill jag bara ha träff på 1053. Finns det inget på 1053 så fall ta värdet från 1033 (som alltid finns).

- M

GladhMedlem sedan maj 20013 024 inlägg
#4

Efter lite testade så var det inte så svårt (om man tittade på svaret i förra tråden)

	SELECT t.Identifier, t.Number, t.Name, 
				t1.Identifier as [ArticleStatus.Identifier], t1.Name as [ArticleStatus.Name]
		FROM dbo.Article t INNER JOIN dbo.ArticleStatus t1 ON t.articleStatusidentifier = t1.identifier 
				AND (t1.lcid = @LCID OR (t1.lcid=1033 AND t1.identifier NOT IN (SELECT identifier FROM dbo.ArticleStatus WHERE lcid=1053))
    )

- M

Genererad på 389 ms · cache AV · v20260730165559-full.f96bc7eb