2013-08-14 2 views
2

Я создаю хранимую процедуру в MS SQL Server 2008.как объявить переменный хранимую процедуру

Вот в моем SP, после оператора вставки, значение идентичности для этой строки, вставленной будет

генерироваться. Я использую это в другом заявлении вставки.

@SID int 

insert into table1(SNAME) values('Sname') 

set @SID=SCOPE_IDENTITY() 

insert into table2(SID)values(@SID) 

здесь, я сомневаюсь, требуется добавить @SID в качестве парметера в код C#.

Как объявить переменную, которая не ожидает какого-либо параметра? так как он получает значение

из самого SP ..

Пожалуйста, помогите

+0

Я могу видеть, как люди размещения такой же ответ снова и снова для вас :) –

+2

Нет , вам не нужно объявлять параметр в коде C#, если вы не собираетесь использовать его в коде. Однако ваша декларация переменной @SID внутри хранимого proc неверна 'DECLARE @SID int' – Steve

+3

Вам не нужно добавлять @SID в качестве параметра из вашего кода на C#, поскольку вам кажется, что он вам нужен только внутри вашего SP. –

ответ

2

Измените SQL из

@SID int 

в

DECLARE @SID int 

Посмотрите DECLARE @local_variable (Transact-SQL)

Переменные объявлены в теле пакета или процедуры с заявлением DECLARE и присваиваются значения с помощью либо SET или ЗЕЬЕСТ. Переменные курсора могут быть объявлены с помощью этого оператора и использоваться с другими инструкциями, связанными с курсором. После объявления все переменные инициализируются как NULL, если значение не указано как часть декларации.

1
CREATE PROCEDURE SPNAME 
    @PARAM1 INT, 
    @PARAM2 VARCHAR(10), 
    . 
    . 
AS 
BEGIN 

    DECLARE @SID AS int 

    insert into table1(SNAME) values('Sname') 

    set @SID=SCOPE_IDENTITY() 

    insert into table2(SID)values(@SID) 

END 
2

мои сомнения, это требуется, чтобы добавить @SID в C код

Вопрос заключается в do you want this identity to be returned as an output parameter к классу #?

Если ДА, то вам необходимо передать его в качестве выходного параметра. Как

@SID INT OUTPUT -- as stored procedure parameter 

Если НЕТ тогда все переменные, которые необходимы локально в хранимой процедуре будет объявлена ​​локально.Вам нужно только изменить

@SID int 

Для

DECLARE @SID int 
1

Для Oracle и переменная объявляя DB2 есть

CREATE OR REPLACE PROCEDURE Proc1() 
IS 
    Declare 
    myName in varchar; 
    STMT VARCHAR(4000); 
BEGIN 
    Select fname into myName from student where fname='x'; // is returning unique value 
END; 
Смежные вопросы