Я использую 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