Я пытаюсь узнать, как использовать конкатенированную процедуру, но она не возвращает результат, который я хочу. Даже когда я использую командуПроцедура конкатенации SQL Server
EXEC SP_NAME_PROCEDURE NULL,NULL,NULL,NULL
или используя данные справа.
ALTER PROCEDURE SP_LISTA_PEDIDOS
@Sdatainicio varchar(100),
@Sdatafim varchar(100),
@chaveBusca varchar(100),
@TipoBusca varchar(100)
AS
DECLARE @SQL VARCHAR(8000)
SET @SQL += 'SELECT *,b.descricao as dscstatus,c.nome as cliente '
SET @SQL += ' FROM pedidos a with(nolock), '
SET @SQL += ' pedidos_status b with(nolock), '
SET @SQL += ' cadastro c with(nolock) '
SET @SQL += ' WHERE '
SET @SQL += ' a.status <> '''' and '
SET @SQL += ' a.status=b.status and '
SET @SQL += ' a.id_doc = c.id_doc '
IF isnull(@chaveBusca,'')<>''
BEGIN
IF isnull(@TipoBusca,'') = 'PEDIDO'
SET @SQL += ' and a.numped= '''[email protected]+''''
IF isnull(@TipoBusca,'') = 'CLIENTE'
SET @SQL += ' and c.nome like '''[email protected]+'%'''
END
IF not (isnull(@chavebusca,'')<>'' and isnull(@TipoBusca,'') = 'PEDIDO')
SET @SQL += ' and data_inclusao BETWEEN '''[email protected]+''' AND '''[email protected]+''''
SELECT @SQL
Можете ли вы, ребята, помочь мне узнать, что случилось?
«но это не дает мне результат, который я хочу». - ну, какой результат он дал вам, и что он хотел? Примечание: то, что вы здесь, представляет собой кошмар sql-injection. Фактически вы можете использовать параметры varadic с помощью 'sp_executesql'. Окончательное значение '@ SQL' было бы полезно, чтобы помочь нам отлаживать. –
Вы не обработали NULL для первых двух параметров. –
Сторона примечания: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –