Este artigo apresenta duas maneiras de selecionar linhas com base em uma lista de IDs (ou outros valores) no SQL Server. Isso pode ser útil em cenários em que você tem uma lista de IDs separada por vírgulas e deseja consultar seu banco de dados em busca de linhas que correspondam a essas IDs.
Digamos que você tenha a seguinte lista de IDs:
1,4,6,8
E agora você deseja consultar uma tabela para registros que tenham qualquer um desses valores (ou seja, 1, 4, 6 ou 8) em sua coluna de ID.
Aqui estão duas maneiras de fazer isso.
Opção 1:O Operador IN
Uma opção é usar o
IN
operador em sua consulta para retornar apenas as linhas especificadas na lista. SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Resultados:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Como você pode ver, os valores no
ArtistId
coluna correspondem aos da nossa lista. Opção 2:a função STRING_SPLIT()
A partir do SQL Server 2016, o
STRING_SPLIT()
A função pode ser usada para dividir uma expressão de caractere usando um separador especificado. Em outras palavras, você pode usá-lo para dividir uma lista delimitada por vírgulas. Aqui está um exemplo usando os mesmos dados do exemplo anterior:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1,4,6,8', ',') ON value = ArtistId;
Resultado:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Um benefício de
STRING_SPLIT()
é que ele permite/(requer) que você especifique o que está sendo usado como delimitador para a lista. Isso pode ser útil quando sua lista usa um caractere diferente como seu delimitador. Aqui está o mesmo exemplo, mas para uma lista separada por espaços:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') ON value = ArtistId;
Resultado:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Nível de compatibilidade
Observe que
STRING_SPLIT()
está disponível apenas em bancos de dados com nível de compatibilidade de 130 ou superior. Você pode alterar o nível de compatibilidade de um banco de dados com a seguinte instrução:ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Ou para levá-lo ao nível do SQL Server 2017:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Onde
MyDatabase
é o nome do banco de dados. Consulte também Como verificar o nível de compatibilidade de um banco de dados no SQL Server.