2011-12-05 34 views
11

Bir tablonun silme işlemini çağırmam gerekir; bu adın adı yalnızca çalışma zamanında bilinir.EXEC() çağrısı hata üretir: saklı yordamı bulamadı

Silme deyimini dinamik olarak, tablename ve ölçütlerle formüle eden bir saklı yordamım var ve sonra bu dizgeyi EXEC() işlevine bir argüman olarak iletir (bunun bir kısmı açık bir şekilde, bir işlem içerisindedir).

Saklı yordamı çalıştırdığımda hata alıyorum - saklı yordamı bulamadım - dinamik olarak formüle ettiğim ve EXEC() öğesine gönderdiğim ifadeye bakarak.

DECLARE @dynTab AS varchar(50), @dynDelete AS varchar(255) 
    DECLARE @crsr CURSOR 
    SET @crsr = CURSOR FAST_FORWARD 
    FOR 
    SELECT dyn_tablename FROM dyn_tab WHERE dyn_doc_type_id IN (SELECT doc_id FROM tree_tab WHERE id = @id) AND dyn_tablecreated = 1 

OPEN @crsr 
FETCH NEXT FROM @crsr 
INTO @dynTab 

WHILE @@FETCH_STATUS = 0 AND @@ERROR = 0 
    BEGIN 
     SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
     EXEC @dynDelete 

     FETCH NEXT FROM @crsr 
     INTO @dynTab 
    END 

      CLOSE @crsr 
     DEALLOCATE @crsr 
     IF @@ERROR <> 0 
     BEGIN 
      ROLLBACK TRAN 
      return 0 
     END 

...

İşte hata var: parantez olmadan

Could not find stored procedure 'DELETE FROM myTable WHERE id = 1111'

cevap

18

EXEC bir prosedür çağrısı girişiminde

İşte benim kod.

Sen olarak aşağıya SQL sorgusu çalıştırmak için
EXEC (@dynDelete)

3

deneyin:

SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXEC(@dynDelete) 

VEYA

SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXECUTE(@dynDelete) 
1

kullanın EXEC() veya EXECUTE() yazmaya gerek EXEC(@dynDelete)

1

Delete DeleteCommandType, kullanılan EXEC

İlgili konular