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。在变量中打印查询并调试它。