input: Eu tenho uma tabela contendo (qualquer número de) strings fornecidas pelo usuário:
╔═══════╗
║ Value ║
╠═══════╣
║ To ║
║ An ║
╚═══════╝
E uma tabela de detalhes do usuário:
╔════════╦══════════╗
║ UserID ║ UserName ║
╠════════╬══════════╣
║ 12 ║ Tom ║
║ 132 ║ Ann ║
║ 32 ║ Dina ║
║ 2 ║ Mark ║
╚════════╩══════════╝
Eu preciso de uma consulta para retornar todos os registros da tabela de usuários, onde UserName
há uma correspondência de string parcial para qualquer Value
registro na tabela de entrada. A saída esperada neste caso é:
╔════════╦══════════╗
║ UserID ║ UserName ║
╠════════╬══════════╣
║ 12 ║ Tom ║
║ 132 ║ Ann ║
╚════════╩══════════╝
Isso deve fazer o que você deseja:
Resultado:
Com base no contexto de sua pergunta anterior, consulta SQL para combinações sem repetição , acho que você está procurando uma maneira de encontrar combinações de usuários e incluir o nome e o ID no conjunto de resultados. O script a seguir demonstra uma maneira de conseguir isso:
Dados de amostra:
Carregue os dados de origem em uma tabela configurada para facilitar a localização de combinações:
Use o fato de que os inteiros naturais têm um padrão de bits que corresponde às combinações que queremos encontrar. Determine o valor inteiro máximo que precisamos com base no número de itens na tabela de trabalho:
Em vez de concatenar os membros do grupo usando
FOR XML PATH
, liste as combinações em linhas com umgroup_id
para identificar cada grupo:Saída parcial:
Você pode ser mais específico no que está tentando realizar? Thomas está certo, parece que você deseja adotar uma abordagem processual para algo que pode ser feito de maneira definida.
Se você deseja obter um conjunto de resultados e processá-los um de cada vez para um aplicativo, recomendo fortemente fazer esse processamento baseado em linha em seu aplicativo. O SQL Server foi projetado para funcionar com conjuntos e não com linhas.
Se você deseja ter um procedimento que retorne a próxima linha toda vez que for chamado. Mais uma vez, sugiro extrair o conjunto de resultados como um todo e processar as operações baseadas em linha no código do aplicativo.
Se você deve fazer isso em t-sql, então um cursor é o que você precisa. Eu recomendo fortemente contra isso, no entanto, uma vez que um cursor é uma linha por uma operação de linha agonizante e os cursores não têm muito desempenho.