преобразование VARCHAR в INT сбой на динамический запрос SQL Server 2008 - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать динамическое предложение WHERE, если параметр не -1.это означает, что это не NULL (я добавил -1 в мое веб-приложение, чтобы сделать некоторые проверки JS, поэтому по умолчанию используется параметр -1, что означает, что в фильтре ничего не выбрано на тот случай, если вам интересно, почему -1и не NULL находится на моей проверке)

Проблемы здесь 2:

  1. Если я запускаю exec(@sql) sql возвращает error converting nvarchar value 'insert dynamic query here'. to data type int Я незнаете, что я делаю не так?

  2. Не знаю, как сделать условие для AND с.Я попытался выполнить запрос, но все еще добавлял условие ADD, даже когда получил параметр -1, что означает, что он не должен появляться в запросе, потому что это NULL.

Я уже пытался добавить некоторые цитаты и прочее в часть + в запросе, но, похоже, ничего не работает

USE db_example
GO
/****** Object:  StoredProcedure [dbo].[proc_FiltroLiq]    Script Date: 29/04/2019 04:03:54 a. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_FiltroLiq] 
@var1 varchar(100),@VAR2 varchar(100),@var3 varchar(100),@var4 varchar(100),@var5 varchar(100),@var6 varchar(100),@var7 varchar(100),
@var8 varchar(100),@var9 varchar(100),@var10 varchar(100),@var11 varchar(100),@var12 varchar(100)
AS
BEGIN
DECLARE @SQL NVARCHAR(1000);
-------DECLARACION DE VARIABLES PARA RECIBIR PARAMETROS, A LA DERECHA SE ENCUENTRA EL NOMBRE DEL CAMPO QUE ESTARA FILLEANDO LA VARIABLE
--declare @var1--PENDIENTE------
--declare @var2 varchar ; --DXZONA
--declare @var3 varchar ; --DXPLAZA
--declare @var4 varchar ; --DXTIENDA
--declare @var5 varchar ; --PENDIENTE------
--declare @var6 varchar ; --DXSUBDIRECCION
--declare @var7 varchar ; --DXCOORDINACION
--declare @var8 varchar ; --DXDEPTO
--declare @var9 varchar ; --DXFAMILIA
--declare @var10 varchar ; --DXPROVEEDOR
--declare @var11 varchar ; --DXMARCA
--declare @var12 varchar ; --DXSUBFAMILIA

Set @SQL= 'select cxupc as "UPC",cncodigointerno as Material,dxupc as Producto,dxsubdireccion as SubDireccion,dxcoordinacion as Coordinacion,dxdepto
as Departamento,dxfamilia as Familia,dxsubfamilia as SubFamilia,dxproveedor As Proveedor,dxmarca as Marca,dxzona as Zona,dxtienda as Sucursal,
mnunidadesinventario as "Inventario Unidades",mminventarioventa as "Inventario Venta",mnporcentajedescuentoactual AS "% Descuento Actual",
cdfechainicialdesc AS "Vigencia Inicial Descuento",mmprecioventaunitario as "Precio de venta",mmpreciorebajado as "Precio Rebajado"
 from PoliticaLiq ';
 --exec(@sql)
IF((@var1 IS NULL OR @var1 = '-1') AND (@VAR2 IS NULL OR @VAR2 = '-1') AND (@VAR3 IS NULL OR @VAR3 = '-1') 
AND (@VAR4 IS NULL OR @var4 = '-1') AND (@VAR5 IS NULL OR @var5 = '-1') AND (@VAR6 IS NULL OR @var6 = '-1')
 AND (@VAR7 IS NULL OR @var7 = '-1') AND (@VAR8 IS NULL OR @var8 = '-1') AND (@VAR9 IS NULL OR @var9 = '-1') 
 AND (@VAR10 IS NULL OR @var10 = '-1') AND (@VAR11 IS NULL OR @var11 = '-1') AND (@VAR12 IS NULL OR @var12 = '-1'))

BEGIN   
    SET NOCOUNT ON;

select TOP 10 cxupc as "UPC",cncodigointerno as Material,dxupc as Producto,dxsubdireccion as SubDireccion,dxcoordinacion as Coordinacion,dxdepto
as Departamento,dxfamilia as Familia,dxsubfamilia as SubFamilia,dxproveedor As Proveedor,dxmarca as Marca,dxzona as Zona,dxtienda as Sucursal,
mnunidadesinventario as "Inventario Unidades",mminventarioventa as "Inventario Venta",mnporcentajedescuentoactual AS "% Descuento Actual",
cdfechainicialdesc AS "Vigencia Inicial Descuento",mmprecioventaunitario as "Precio de venta",mmpreciorebajado as "Precio Rebajado"
 from PoliticaLiq
 group by cxupc,cncodigointerno,dxupc,dxsubdireccion,dxcoordinacion,dxdepto,dxfamilia,dxsubfamilia,dxproveedor,dxmarca,dxzona,dxtienda,
 mnunidadesinventario,mminventarioventa,mnporcentajedescuentoactual,cdfechainicialdesc,mmprecioventaunitario,mmpreciorebajado
END

--PENDIENTE PARA CAMPO DE TABLA
IF((@var1 IS NOT NULL and @VAR1 !='-1'))
    SET @SQL = @SQL + 'WHERE dxsubdireccion''' + @var1+''
else 
--FIN PENDIENTE
IF((@var2 IS NOT NULL  and @VAR2 !='-1') and (@VAR1 = '-1'))
        SET @SQL = @SQL + ' where dxzona = ''' + @var2 + ''''

ELSE
    SET @SQL = @SQL + ' AND  dxzona = ''' + @VAR2+'' 
IF((@var3 IS NOT NULL and @VAR3 != '-1') and (@VAR1 = '-1' )and (@VAR2 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxplaza  = ' + @VAR3
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxplaza =' + @VAR3
IF((@var4 IS NOT NULL  and @VAR4 != '-1') and (@VAR1 = '-1') and(@VAR2 = '-1') AND (@VAR3 = '-1'))
BEGIN
    SET @SQL = @SQL + '  
                WHERE dxtienda  =' + @VAR4
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxtienda  =' + @VAR4
--IF((@var5 IS NOT NULL and @VAR5 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1'))
--PENDIENTE PARA FILTRO DE ALMACEN
--BEGIN
--  SET @SQL = @SQL + ' 
--                WHERE CAMPO5 = ' + @VAR5 + ' '
--END
--ELSE
--  SET @SQL = @SQL + ' 
 --               AND  = CAMPO5' + @VAR5 + ' '
-- FIN PENDIENTE
IF((@var6 IS NOT NULL and @VAR6 != '-1')  and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxsubdireccion = ' + @VAR6
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxsubdireccion = ' + @VAR6
IF((@var7 IS NOT NULL and @VAR7 != '-1')  and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxcoordinacion = ' + @VAR7
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxcoordinacion = ' + @VAR7
IF((@var8 IS NOT NULL and @VAR8 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1') AND (@VAR7 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE  dxdepto = ' + @VAR8
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxdepto = ' + @VAR8
IF((@var9 IS NOT NULL and @VAR9 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1') AND (@VAR7 = '-1') AND (@VAR8 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxfamilia = ' + @VAR9
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxfamilia = ' + @VAR9
IF((@var10 is not null and @VAR10 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1') AND (@VAR7 = '-1') AND (@VAR8 = '-1') AND (@VAR9 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxproveedor = ' + @VAR10
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxproveedor = ' + @VAR10
IF((@var11 IS NOT NULL  and @VAR11 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1') AND (@VAR7 = '-1') AND (@VAR8 = '-1') AND (@VAR9 = '-1') AND (@VAR10 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxmarca = ' + @VAR11
END
ELSE
    SET @SQL = @SQL + ' 
                AND dxmarca = ' + @var11
IF((@var12 IS NOT NULL and @VAR12 != '-1') and (@VAR1 = '-1') and (@VAR2 = '-1') AND (@VAR3 = '-1') AND (@VAR4 = '-1') AND (@VAR5 = '-1') AND (@VAR6 = '-1') AND (@VAR7 = '-1') AND (@VAR8 = '-1') AND (@VAR9 = '-1') AND (@VAR10 = '-1') AND (@VAR11 = '-1'))
BEGIN
    SET @SQL = @SQL + ' 
                WHERE dxsubfamilia = ' + @VAR12
END
ELSE
begin
    SET @SQL = @SQL + ' 
                AND dxsubfamilia = ' + @VAR12       
                end
return @sql
EXEC(@SQL)
end

Я ожидаю сделать динамический запрос, но я оченьзапутался в том, что нужно сделать, чтобы это заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...