Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server EXEC(@sql)不工作_Sql Server_Stored Procedures_Sql Insert_Dynamic Sql - Fatal编程技术网

Sql server EXEC(@sql)不工作

Sql server EXEC(@sql)不工作,sql-server,stored-procedures,sql-insert,dynamic-sql,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, N

我有一个执行的存储过程

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
它很好用

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

我能做什么


谢谢

看起来你在做一个过滤器?但是筛选器应该是名称为“%”++@searchString++“%”或描述为“%”++@searchString++“%”。也许我说的不对

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

          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))

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


我刚刚更改了调用存储过程的顺序,效果很好。

可能您的语法有错误,请尝试打印输出查询,将EXEC@SQL更改为print@SQL当我确实从TMP\u VACANTES\u MATCHING\u filterado中删除时会出现问题。在调用存储过程之前,如果不起作用,但我确实删除了,在插入之后,因此,当存储过程正在执行时,存在dataUse而不是EXEC。在变量中打印查询并调试它。