Charindex não retorna nenhum registro se apenas uma letra for fornecida. Se o parâmetro corresponder à palavra inteira, ele mostra o registro. Por que???
USE [database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[filter_opombe]
@opombe_par nchar(256)
AS
BEGIN
SELECT Id_opombe
FROM opombe
WHERE (CHARINDEX(@opomba_par, opomba,0) > 0)
END
Obrigado por todas as suas respostas com antecedência.
Você deve declará-lo como (n)varchar(x) se precisar de uma string de comprimento variável:
Com um tipo de dados (n)char, a string mais curta será preenchida com espaço em branco no final: 'x' com tipo de dados nchar(5), torna-se
'x '
.Obrigado pela resposta mais rápida.
E obrigado pela ideia. Eu não estava indo nessa direção. Mas agora está tudo claro. Não era tanto um tipo, mas sim aparar o parâmetro foi a solução:
Resolvido. Parece que funciona agora.
EDITAR:
Desculpe a todos vocês. Eu passei por isso novamente e a resposta de Julien funciona como um encanto.
Para melhorar ainda mais este tópico, postarei a solução com CHARINDEX para filtrar várias colunas por letras ou strings, independentemente de nulos, espaços vazios. Isso provavelmente pode ajudar qualquer pessoa que esteja procurando por esse tipo de solução.
Depois de declarar todos esses parâmetros (dentro da seção de parâmetros de sua função) obtidos de caixas de texto de filtro ou caixas de texto em qualquer lugar do seu formulário:
e selecionou tudo o que você gostaria de selecionar:
você finalmente coloca a cereja no topo... ou melhor, cereja na parte inferior da função dentro da seção WHERE:
isso deve fazer o truque de filtrar três tabelas unidas em uma consulta (função) com a saída de quatro colunas filtradas por letras ou strings únicas ... também nulos e espaços vazios. )