2011-10-28 60 views
0

如果#tablaTemporal = null,我需要設置表格Blt_Boleta.ti_Pk_IdEstadoRevision = 3的屬性。我在想插入和FETCH NEXT FROM miCursor INTO @boletaActual之間。也許用這樣的計數或somethig ...如何設置一個屬性表,如果表爲空?

那麼我該如何做到這一點?

ALTER PROCEDURE [dbo].[paBltBuscarBoletasASA] @id_Asa int 
     -- Add the parameters for the stored procedure here 
AS 
DECLARE @boletaActual int 
CREATE TABLE #tablaTemporal 
(
Numero_Pregunta varchar(250), 
Numero_Boleta char(8), 
Cultivo varchar(250), 
Numero_Siembra int, 
Detalle_Error varchar(250) 
) 
DECLARE miCursor CURSOR FOR 

       SELECT 
        localizacion.c_Fk_IdBoleta 
       FROM 
        Blt_Boleta as boleta, Fnc_Localizacion as localizacion 
       WHERE 
        boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND 
        localizacion.si_CodAsa = @id_Asa 
OPEN miCursor 
FETCH NEXT FROM miCursor INTO @boletaActual 

WHILE @@FETCH_STATUS = 0 

BEGIN 
INSERT INTO #tablaTemporal 
(Numero_Pregunta, Numero_Boleta, Cultivo, Numero_Siembra, Detalle_Error) 
exec dbo.paBltMarcarErroresBoleta @boletaActual 

FETCH NEXT FROM miCursor INTO @boletaActual 
END 

CLOSE miCursor 
DEALLOCATE miCursor 
SELECT * FROM #tablaTemporal 
+0

如果表,'#tableTemporal'不存在,或者它內部的某些值不存在,是否要更新'Blt_boleta'? SQL Server應該有一個'信息模式'(我知道的大多數其他RDBMS),它有一組表中的表/列/等信息。我不知道你的是什麼,我有點擔心那裏沒有引用臨時表。如果您只是想根據行的存在進行更新,那麼這很簡單(通常是一個陳述)。如果根據表的存在,你可以在存儲過程中做到這一點,如果你可以檢查錯誤。 –

回答

0

您不能檢查#tableTemporal是否爲空,因爲它永遠不會。你可能打算檢查在你執行paBltMarcarErroresBoleta後是否有行插入#tableTemporal。

如果我理解正確的話,我想你可以不喜歡後exec dbo.paBltMarcarErroresBoleta @boletaActual東西:後

DECLARE miCursor CURSOR FOR 

       SELECT 
        localizacion.c_Fk_IdBoleta 
       FROM 
        Blt_Boleta as boleta, Fnc_Localizacion as localizacion 
       WHERE 
        boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND 
        localizacion.si_CodAsa = @id_Asa 
FOR UPDATE OF Blt_Boleta.ti_Pk_IdEstadoRevision 

而且exec dbo.paBltMarcarErroresBoleta @boletaActual

if not exists(select 1 from #tableTemporal) 
update Blt_Boleta 
set Blt_Boleta.ti_Pk_IdEstadoRevision=3 
where current of miCursor 

但你可以更好地用一個簡單的while循環,而不是可能執行此光標。

相關問題