Estou tentando acessar a tabela Customer a partir dos dados na tabela SiteConfiguration.
Estou pegando os dados e configurando-os para @AdditionalVoteViewers
, que seria uma sequência de endereços de e-mail. Então, divido a sequência e insiro os resultados em uma tabela temporária.
Nesse ponto, unirei a tabela temporária com a tabela Cliente para retornar o CustomerId .
Só quero ver se há uma maneira melhor de fazer isso.
Dados na tabela SiteConfiguration
[email protected];[email protected]
Dados na tabela Cliente
[email protected] 1
[email protected] 2
Código:
declare @AdditionalVoteViewers VARCHAR(100)
Select @AdditionalVoteViewers =
(
SELECT [Value] FROM [SiteConfiguration]
where Name = 'AdditionalVoteViewers'
)
print @AdditionalVoteViewers
--CREATE TABLE #TempAdditionalVoteViewers(email varchar(MAX) )
select * into #TempAdditionalVoteViewers
from [dbo].[Split] (@AdditionalVoteViewers,';')
--select * from #TempAdditionalVoteViewers
select [CustomerId] into #TempAdditionalVoteViewersId
from [dbo].[Customer] c
join #TempAdditionalVoteViewers t on c.Email = t.val
select * from #TempAdditionalVoteViewersId
está bem
Você está fazendo as coisas corretamente, no sentido de que não está dividindo a string na sua consulta e unindo aos resultados. Isso geralmente é uma receita para desastre de desempenho .
Se eu pudesse fazer uma sugestão, seria garantir que a instrução de criação da tabela temporária ou a seleção em converta a coluna de e-mail em um tipo de dados e comprimento que corresponda à coluna de e-mail na tabela Cliente.
No seu código de exemplo, você está fazendo isso:
Usar o máximo de tipos de dados para colunas ou parâmetros/variáveis fará com que você não consiga buscar em nenhum índice útil que possa ter. Não tenho ideia do que o código da sua
Split
função faz, mas a maioria dos que vi copiados e colados de blogs do SQL Server com mais de 20 anos são genéricos e geralmente retornam tipos de saída ridículos.