EXEC(@sql)不起作用

时间:2015-11-18 01:43:36

标签: sql-server stored-procedures sql-insert dynamic-sql

我有一个执行

的存储过程
DECLARE 
    @PalabraResultante  VARCHAR(100),
    @FiltroAdicional    VARCHAR(MAX),
    @FiltroAdicional2   VARCHAR(MAX),
    @Sql                NVARCHAR(MAX)

SET @Sql = 'INSERT INTO TMP_SEMANTICA_OFERENTE (IdSede, IdProceso, Nombre, NombreEmpresa, Departamento, FechaInicio, DescripcionVacante, IdDepartamento, IdGrupoOcupacional1, IdGrupoOcupacional2, IdGrupoOcupacional3, IdSalarioRango, IdTipoContrato, IdNivelEstudio, IdJornada, IdIndustria, Titulo, Cargo1, Cargo2, Cargo3, TipoLocalizacion, LocalizacionId, Aplica, NombreCiudad, IdSesion, FechaInsercion)
            SELECT IdSede, IdProceso, Nombre, NombreEmpresa, Departamento, FechaInicio, DescripcionVacante, IdDepartamento, IdGrupoOcupacional1, IdGrupoOcupacional2, IdGrupoOcupacional3, IdSalarioRango, IdTipoContrato, IdNivelEstudio, IdJornada, IdIndustria, Titulo, Cargo1, Cargo2, Cargo3, TipoLocalizacion, LocalizacionId, Aplica, NombreCiudad, IdSesion, FechaInsercion
            FROM TMP_VACANTES_MATCHING_FILTRADO
            WHERE ((IdSesion = '''+@IdSesion+''') AND ('

SET @FiltroAdicional = ' OR ('
SET @FiltroAdicional2 = ' OR ('

DECLARE cBusqueda CURSOR FOR
    SELECT * FROM dbo.Split(@CadenaBusqueda,'')

OPEN cBusqueda
FETCH cBusqueda INTO @palabraResultante 

WHILE (@@FETCH_STATUS = 0) BEGIN
    SET @Sql = @Sql + ' CONTAINS(Nombre,'''+@palabraResultante+''') AND'
    SET @FiltroAdicional = @FiltroAdicional + ' CONTAINS(DescripcionVacante,'''+@palabraResultante+''') AND'
    SET @FiltroAdicional2 = @FiltroAdicional2 + ' CONTAINS(Titulo,'''+@palabraResultante+''') AND'

    FETCH cBusqueda INTO @palabraResultante
END

CLOSE cBusqueda
DEALLOCATE  cBusqueda

SET @Sql = SUBSTRING(@Sql,1,LEN(@Sql)-4)+')'
SET @FiltroAdicional = SUBSTRING(@FiltroAdicional,1,LEN(@FiltroAdicional)-4)+')'
SET @FiltroAdicional2 = SUBSTRING(@FiltroAdicional2,1,LEN(@FiltroAdicional2)-4)+')'

SET @Sql = @Sql + @FiltroAdicional+' '+@FiltroAdicional2  +' )'

EXEC (@SQL)

如果我用以下方法调用此存储过程

EXEC spName

一切正常

但是当我在另一个存储过程中调用存储过程时,它不起作用。

我该怎么办?

由于

2 个答案:

答案 0 :(得分:0)

看起来你在做一个过滤器?但过滤器应该是OR(名称类似于'%' + @ searchString +'%'或描述类似于'%' + @ searchString +' %&#39)。也许我在这方面不正确。

即便如此,请查看以下模式:

          INSERT INTO TMP_SEMANTICA_OFERENTE 
                    (IdSede,IdProceso,Nombre,NombreEmpresa,
                     Departamento,FechaInicio,Des0cripcionVacante,
                IdDepartamento,IdGrupoOcupacional1,
                11,IdGrupoOcupacional2, IdGrupoOcupacional3,IdSalarioRango,
                IdTipoContrato,IdNivelEstudio,IdJornada,IdIndustria,
               Titulo,
               Cargo1,
               Cargo2, 
               Cargo3,
               TipoLocalizacion, 
               LocalizacionId,
               Aplica,
               NombreCiudad,
               IdSesion,
               FechaInsercion)
                     SELECT IdSede,
                            IdProceso,
                            Nombre,
                            NombreEmpresa,
                            Departamento,
                            FechaInicio,
                            DescripcionVacante,
                            IdDepartamento,
                            IdGrupoOcupacional1,
                            IdGrupoOcupacional2,
                            IdGrupoOcupacional3,
                            IdSalarioRango,
                            IdTipoContrato,
                            IdNivelEstudio,
                            IdJornada,
                            IdIndustria,
                            Titulo,
                            Cargo1,
                            Cargo2,                                                                 
                            Cargo3,
                            TipoLocalizacion,
                            LocalizacionId,
                            Aplica,
                            NombreCiudad,
                            IdSesion,
                            FechaInsercion
                            FROM TMP_VACANTES_MATCHING_FILTRADO                 
                            WHERE ((IdSesion = @IdSesion) 
                                 AND EXISTS 
                                   (SELECT 1 
                                   FROM dbo.Split(@CadenaBusqueda,'') Nombre
                                   WHERE CONTAINS(Nombre,@palabraResultante)
                             OR CONTAINS(DescripcionVacante,@palabraResultante)
                            OR CONTAINS(Titulo,@palabraResultante))

答案 1 :(得分:0)

我真的不知道它发生了什么

我刚刚更改了调用存储过程的顺序,它运行正常。