2011-01-26 4 views
1

У меня есть рекурсивная хранимая процедура на SQL Server. Я использую классы, созданные с помощью Linq-to-SQL, и перетаскиваю & процедуру удаления в этот класс.linq to sql не удалось выполнить вызов процедуры процедуры

Другие процедуры работают нормально, но это процедура завершается с исключением:

«System.Void» не допускается тип возврата . недопустимая операция исключение

Хранимая процедура:

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[delListEnterprise] 
@pin_list_enterprise_id numeric(38,0), 
@cCriteria varchar(250) = null, 
@iLevel int = 0 
AS 
begin 
set nocount on 
declare 
    @cSQL varchar(255), 
    @cChildCriteria varchar(255), 
    @iLevelNew int 
IF @iLevel = 0 
    BEGIN 
     set @cCriteria='parent_list_enterprise_id='+cast(@pin_list_enterprise_id as varchar(30)); 
     delete from list_enterprise where [email protected]_list_enterprise_id; 
     Create Table #tblCascadeDelete (CallLevel int NOT NULL, PKValue int NOT NULL) 
    END 
SET @cSQL = 'INSERT INTO #tblCascadeDelete (CallLevel, PKValue) SELECT ' + Convert(varchar(3), @iLevel) + ' As CallLevel, list_enterprise_id As PKValue FROM list_enterprise WHERE ' + @cCriteria 
EXEC (@cSQL) 
IF @@RowCount > 0 
    BEGIN 
     SET @cChildCriteria = '[parent_list_enterprise_id] IN (SELECT [PKValue] FROM #tblCascadeDelete Where [CallLevel] = ' + Convert(varchar(3), @iLevel) + ')' 
     SET @iLevelNew = @iLevel + 1 
     EXEC delListEnterprise null,@cChildCriteria, @iLevelNew 
    END 
SET @cSQL = 'DELETE FROM list_enterprise WHERE ' + @cCriteria 
EXEC (@cSQL) 
IF @iLevel = 0 
    BEGIN 
     Drop Table #tblCascadeDelete 
    END 
ELSE 
    DELETE FROM #tblCascadeDelete WHERE CallLevel = @iLevel 
end 

Это работает, если я запустить его в SQL Server Management Studio.

ответ

0

Просто добавьте параметр возврата/вывода в хранимую процедуру. Я подозреваю, что это ограничение Linq2SQL (или никто не думал об этом).

Смежные вопросы