Как получить значение @@ identity или SELECT SCOPE_IDENTITY () из хранимой процедуры в коде C #? - PullRequest
0 голосов
/ 24 мая 2019

Я использую SQL Server 2012. В этой хранимой процедуре я хочу получить значение @@identity или SELECT SCOPE_IDENTITY(). intMyIdentity - это столбец идентификаторов.

CREATE PROCEDURE [spMyInsert] 
    (@vchVar AS VARCHAR(20), 
     @fltVar AS FLOAT)
AS
    SELECT TOP 1 intMyIdentity 
    FROM MyTbl  
    WHERE vchVar = @vchVar

    IF @@rowcount = 0
    BEGIN
        INSERT INTO MyTbl (vchVar, fltVar) 
        VALUES (@vchVar, @fltVar)

        SELECT @@identity AS intMyIdentity 
        -- SELECT SCOPE_IDENTITY()
    END

Как я могу получить значение @@identity или SELECT SCOPE_IDENTITY() в C #?

При использовании ExecuteScalar вместо правильного значения возвращается 0.

SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString);
oConn.Open();

mCommand.CommandText = "spMyInsert";
mCommand.Parameters.Add(new SqlParameter("@vchVar", txtMyVar.Text));
mCommand.Parameters.Add(new SqlParameter("@fltVar", dblMyVar));
mCommand.Connection = oConn;
mCommand.CommandType = CommandType.StoredProcedure; 

intMyIdentity = Convert.ToInt32(mCommand.ExecuteScalar());  --> this always return 0
oConn.Close();

Отредактировано: этот запрос работает

IF NOT EXISTS (SELECT 1 FROM myTbl WHERE vchVar = @vchVar)
BEGIN
    INSERT INTO myTbl (vchVar, fltVar)
    VALUES (@vchVar, @fltVar)

    SELECT SCOPE_IDENTITY()
END

1 Ответ

0 голосов
/ 25 мая 2019

Когда вы используете ExecuteScalar, ваша хранимая процедура должна ВЕРНУТЬ идентификатор @@. Что-то вроде RETURN @@ IDENTITY;

...