SQL SERVER, CONSULTA PARA APLICATIVO MULTI-IDIOMAS
é mais ou menos assim tenho os status 1 , 2 e 3 sempre tenho que exibir { 1 , 2 , 3 } vamos imaginar que só o status 1 está traduzido para inglês
eu teria que exibir o status 1 em inglês e o 2 e 3 em português, é mais fácil eu mostrar um exemplo através de script
Citação:
Create Table tb_status
(
cod_status int not null,
Constraint PK_status primary key (cod_status)
)
GO
Create Table tb_idioma
(
cod_idioma varchar(10) not null,
Constraint PK_idioma primary key (cod_idioma)
)
GO
Create Table tb_Cultura_Padrao
(
cod_idioma varchar(10) not null,
Constraint PK_Cultura_Padrao Primary Key (cod_idioma),
Constraint FK_Cultura_Padrao Foreign Key (cod_idioma) references tb_idioma(cod_idioma)
)
GO
Create Table tb_status_idioma
(
cod_status int not null,
cod_idioma varchar(10) not null,
nom_status varchar(50) not null,
constraint pk_status_idioma Primary Key (cod_status,cod_idioma),
constraint fk_status_idioma_01 Foreign Key (cod_status) references tb_status(cod_status),
constraint fk_status_idioma_02 Foreign Key (cod_idioma) references tb_idioma(cod_idioma)
)
GO
insert into tb_status (cod_status) values (1)
insert into tb_status (cod_status) values (2)
insert into tb_status (cod_status) values (3)
GO
insert into tb_idioma(cod_idioma) values ([ô]pt-BR[ô])
insert into tb_idioma(cod_idioma) values ([ô]en-US[ô])
GO
insert into tb_cultura_padrao values ([ô]pt-BR[ô])
GO
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (1,[ô]en-US[ô],[ô]Active[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (1,[ô]pt-BR[ô],[ô]Ativo[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (2,[ô]pt-BR[ô],[ô]Inativo[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (3,[ô]pt-BR[ô],[ô]Outro status[ô])
GO
Drop Procedure Desafio
GO
Create Procedure Desafio
@Idioma_Selecionado varchar(10)
AS
Begin
-- Detecta o Idioma Padrão
DECLARE @Idioma_Padrao varchar(10)
Select TOP 1 @Idioma_Padrao = cod_idioma From tb_Cultura_Padrao
Select A.Cod_Status,
B.Cod_Idioma,
B.nom_status,
Case B.Cod_Idioma
When @Idioma_Selecionado Then 100
When @Idioma_Padrao Then 50
End As Peso
From TB_Status as A
Inner Join TB_Status_Idioma As B On B.cod_status = A.cod_status
Where B.Cod_Idioma = @Idioma_Selecionado
Or B.cod_idioma = @Idioma_Padrao
Order By 4 Desc
End
GO
Execute Desafio [ô]en-US[ô]
/*----------------------------------------------------------------------
O Resultado deveria ser apenas
1 en-US Active 100
2 pt-BR Inativo 50
3 pt-BR Outro status 50
Mas esta Procedure Retorna
1 en-US Active 100
1 pt-BR Ativo 50
2 pt-BR Inativo 50
3 pt-BR Outro status 50
----------------------------------------------------------------------*/
Se alguém puder me ajudar
Você tem 4 registros na tabela:
Um deles é o @Idioma_Selecionado
Os demais são o @Idioma_Padrao
select * from From TB_Status as A
Inner Join TB_Status_Idioma As B On B.cod_status = A.cod_status
Where [txt-color=#e80000]B.Cod_Idioma = @Idioma_Selecionado
Or B.cod_idioma = @Idioma_Padrao [/txt-color]
Traz en-US ou pt-BR.
Citação:eu teria que exibir o status 1 em inglês e o 2 e 3 em português
eu tenho que exibir o status 1 2 e 3, se estiver tudo traduzido eu exibo os 3 no @Idioma_Selecionado, o problema é quando está pela metade, que eu tenho que exibir 1 no @Idioma_Selecionado e os demais no @Idioma_Padrao
Select Distinct *
From TB_STATUS_IDIOMA
minus
Select Distinct *
From TB_STATUS_IDIOMA
where Nom_Status=[ô]Ativo[ô];