/ / EXEC (@sql) nie działa - sql-server, zapisane procedury, sql-insert, dynamic-sql

EXEC (@sql) nie działa - sql-server, zapisane procedury, sql-insert, dynamic-sql

Mam procedura składowana, która wykonuje

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)

Jeśli zadzwonię do tej procedury przechowywanej z:

EXEC spName

to działa dobrze

ale kiedy wywołać procedurę przechowywaną wewnątrz innej procedury przechowywanej, nie działa.

Co mogę zrobić?

Dzięki

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że robisz filtr? Ale filtry powinny być OR (Nazwa jak "%" + @ searchString + "%" LUB Opis jak "%" + @ searchString + "%"). Może nie mam racji w tym.

Mimo to spójrz na następujący wzór:

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

0 dla odpowiedzi nr 2

Naprawdę nie wiedziałem, co się stało

Właśnie zmieniłem kolejność wywoływania procedur przechowywanych i działa dobrze.