Usuário com melhor resposta
Usar Like em execute sp_executeSQL

Pergunta
-
Olá a todos mas uma vez venho recorrer a voces caros colegas desenvolvedores bom meu problema é o seguinte
eu tenho uma procedure em sql q monda uma select dinamicamente soah q eu qria usar o like nela pois não estou
conseguindo concatenar a minha instrução algum dos Sr(s). poderia me dar uma mão quanto a isto vou postar a
procedure aqui e se alguém puder me ajudar a concatenar ela e colocar o like sou grato
bom a procedure é a seguinte:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE FiltrarValidadorBusca @Mascara BIGINT, @WLAN VARCHAR(50), @RC VARCHAR(50), @PREFIXO BIGINT, @STATUS TINYINT AS BEGIN DECLARE @concat INT = 0 DECLARE @strConcat NVARCHAR(7) DECLARE @cmdSQL NVARCHAR(2000) IF(@PREFIXO <> 0) BEGIN set @cmdSQL = 'SELECT C.Prefixo, V.ValidadorID, V.Mascara, V.Rc, V.Wlan, tv.DESCRICAO FROM tblValidadoresPiedade V INNER JOIN tblCarrosPiedade C ON C.ValidadorID = V.ValidadorID INNER JOIN tblStatusValidador tv ON tv.statusID = V.StatusID WHERE C.PREFIXO LIKE '+ CONVERT(nvarchar, @PREFIXO, 111)+'%' END ELSE BEGIN SET @cmdSQL = 'SELECT C.Prefixo, V.ValidadorID, V.Mascara, V.Rc, V.Wlan, tv.DESCRICAO FROM tblValidadoresPiedade V INNER JOIN tblCarrosPiedade C ON C.ValidadorID = V.ValidadorID INNER JOIN tblStatusValidador tv ON tv.statusID = V.StatusID ' IF(@Mascara <> 0) BEGIN IF(@concat = 0)BEGIN SET @strConcat = ' WHERE ' SET @concat = 1 END ELSE BEGIN SET @strConcat = ' OR ' SET @concat = 1 END SET @cmdSQL += @strConcat + 'v.mascara LIKE '+ CONVERT(NVARCHAR, @Mascara,111)+'%''' END IF(@WLAN <> '') BEGIN IF(@concat = 0)BEGIN SET @strConcat = ' WHERE ' SET @concat = 1 END ELSE BEGIN SET @strConcat = ' AND ' SET @concat = 1 END SET @cmdSQL += @strConcat + 'v.WLAN LIKE '+CONVERT(NVARCHAR, @WLAN,111)+ '%''' END IF(@RC <> '') BEGIN IF(@concat = 0)BEGIN SET @strConcat = ' WHERE ' SET @concat = 1 END ELSE BEGIN SET @strConcat = ' OR ' SET @concat = 1 END SET @cmdSQL += @strConcat + 'v.Rc LIKE '+CONVERT(VARCHAR, @RC,111)+'%''' END IF(@STATUS <> 0) BEGIN IF(@concat = 0)BEGIN SET @strConcat = ' WHERE ' SET @concat = 1 END ELSE BEGIN SET @strConcat = ' OR ' SET @concat = 1 END SET @cmdSQL += @strConcat + 'tv.StatusID LIKE ' + CONVERT(VARCHAR, @STATUS,111)+'%''' END END execute sp_executesql @cmdSQL END select * from tblValidadoresPiedade inner join tblStatusValidador on tblValidadoresPiedade.StatusID = tblStatusValidador.statusID
Como deixar o like funcional nessa query
grato a todos
Att Edney Desenvolvedor C#, WindowsForms, Asp.Net WebForms, Asp.Net MVC
Respostas
-
Edney,
Tente essa:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE FiltrarValidadorBusca
@Mascara BIGINT,
@WLAN VARCHAR(50),
@RC VARCHAR(50),
@PREFIXO BIGINT,
@STATUS TINYINT
AS
BEGIN
DECLARE @concat INT = 0
DECLARE @strConcat NVARCHAR(7)
DECLARE @cmdSQL NVARCHAR(2000)
IF(@PREFIXO <> 0) BEGIN
set @cmdSQL = 'SELECT C.Prefixo,
V.ValidadorID,
V.Mascara,
V.Rc, V.Wlan,
tv.DESCRICAO
FROM tblValidadoresPiedade V
INNER JOIN tblCarrosPiedade C
ON C.ValidadorID = V.ValidadorID
INNER JOIN tblStatusValidador tv
ON tv.statusID = V.StatusID
WHERE C.PREFIXO LIKE '''+ CONVERT(nvarchar, @PREFIXO, 111)+'%' + ''''
END
ELSE BEGIN
SET @cmdSQL = 'SELECT C.Prefixo,
V.ValidadorID,
V.Mascara,
V.Rc, V.Wlan,
tv.DESCRICAO
FROM tblValidadoresPiedade V
INNER JOIN tblCarrosPiedade C
ON C.ValidadorID = V.ValidadorID
INNER JOIN tblStatusValidador tv
ON tv.statusID = V.StatusID '
IF(@Mascara <> 0) BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.mascara LIKE '+ '''' + CONVERT(NVARCHAR, @Mascara,111)+'%' + ''''
END
IF(@WLAN <> '') BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' AND '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.WLAN LIKE '+ '''' + CONVERT(NVARCHAR, @WLAN,111)+ '%' + ''''
END
IF(@RC <> '') BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.Rc LIKE '+ '''' + CONVERT(VARCHAR, @RC,111)+'%' + ''''
END
IF(@STATUS <> 0) BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'tv.StatusID LIKE ' + '''' + CONVERT(VARCHAR, @STATUS,111)+'%' + ''''
END
END
execute sp_executesql @cmdSQL
ENDAtt.,
Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.- Marcado como Resposta Edney Batista Silva terça-feira, 23 de novembro de 2010 13:19
Todas as Respostas
-
Edney,
Qdo tenho query's mais elaboradas q não funcionam, normalmente "quebro" ela em partes. Tente fazer isso para usar onde tenha somente um LIKE. Assim vc saberá em que ponto está o erro. As vezes é um dos comandos LIKE que está com problemas e não todos.
Outra forma que faço é "printar" o comando que vc está montando. Pode ser que devido a um problema com aspas, parenteses, etc, sua query não roda.
Att.,
Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo. -
Ola marco esta o problema é o seguinte esta query funfa perfeitamente usando = <> etc
soah q ela não fumega com like justamente por causa das aspas e eu não estou conseguindo
concatenar a string para mandar ela para o sp_executesql
Att Edney Desenvolvedor C#, WindowsForms, Asp.Net WebForms, Asp.Net MVC -
Edney,
Tente essa:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE FiltrarValidadorBusca
@Mascara BIGINT,
@WLAN VARCHAR(50),
@RC VARCHAR(50),
@PREFIXO BIGINT,
@STATUS TINYINT
AS
BEGIN
DECLARE @concat INT = 0
DECLARE @strConcat NVARCHAR(7)
DECLARE @cmdSQL NVARCHAR(2000)
IF(@PREFIXO <> 0) BEGIN
set @cmdSQL = 'SELECT C.Prefixo,
V.ValidadorID,
V.Mascara,
V.Rc, V.Wlan,
tv.DESCRICAO
FROM tblValidadoresPiedade V
INNER JOIN tblCarrosPiedade C
ON C.ValidadorID = V.ValidadorID
INNER JOIN tblStatusValidador tv
ON tv.statusID = V.StatusID
WHERE C.PREFIXO LIKE '''+ CONVERT(nvarchar, @PREFIXO, 111)+'%' + ''''
END
ELSE BEGIN
SET @cmdSQL = 'SELECT C.Prefixo,
V.ValidadorID,
V.Mascara,
V.Rc, V.Wlan,
tv.DESCRICAO
FROM tblValidadoresPiedade V
INNER JOIN tblCarrosPiedade C
ON C.ValidadorID = V.ValidadorID
INNER JOIN tblStatusValidador tv
ON tv.statusID = V.StatusID '
IF(@Mascara <> 0) BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.mascara LIKE '+ '''' + CONVERT(NVARCHAR, @Mascara,111)+'%' + ''''
END
IF(@WLAN <> '') BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' AND '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.WLAN LIKE '+ '''' + CONVERT(NVARCHAR, @WLAN,111)+ '%' + ''''
END
IF(@RC <> '') BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'v.Rc LIKE '+ '''' + CONVERT(VARCHAR, @RC,111)+'%' + ''''
END
IF(@STATUS <> 0) BEGIN
IF(@concat = 0)BEGIN
SET @strConcat = ' WHERE '
SET @concat = 1
END
ELSE BEGIN
SET @strConcat = ' OR '
SET @concat = 1
END
SET @cmdSQL += @strConcat + 'tv.StatusID LIKE ' + '''' + CONVERT(VARCHAR, @STATUS,111)+'%' + ''''
END
END
execute sp_executesql @cmdSQL
ENDAtt.,
Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.- Marcado como Resposta Edney Batista Silva terça-feira, 23 de novembro de 2010 13:19
-
Era exatamente o q eu qria apartir deste modelo vou estudar esta cadeia de caracteres para não sofrer
tanto mas sou mto grato a ti Sr Marcos isto me ajudo mto msmo qlqr coisa eu posto novamente^^
Att Edney Desenvolvedor C#, WindowsForms, Asp.Net WebForms, Asp.Net MVC