У меня есть таблица, в которой есть столбец, который автоматически создается на основе других столбцов в таблице. Я пытаюсь вставить данные в таблицу с помощью хранимой процедуры, а затем вернуть столбец автоматического генерации. В приведенной ниже хранимой процедуре @Num
представляет собой автоматически созданный столбец.
Подход, который я здесь делаю, касается вставки данных в базу данных. То, что не работает, возвращает @Num
из хранимой процедуры Insert
. Я пытаюсь сделать это. Если да, то что я делаю неправильно? Если нет, есть ли альтернативный метод для этого?
Это мой С#. Когда я запускаю это, returnValue
возвращается null.
internal static bool InsertApplication(Something something)
{
object returnValue;
string sql = "usp_InsertSproc";
returnValue = DatabaseFactory.CreateDatabase("ConnectionString").ExecuteScalar(sql, new Object[] { something.First_Name, something.Last_Name });
//I'd like to be able to access the @Num value from the Sproc here
}
Это моя хранимая процедура:
ALTER PROCEDURE [dbo].[usp_InsertSproc]
(
@First_Name varchar(50),
@Last_Name varchar(50),
@Num Varchar(500) Output
)
AS
SET NOCOUNT OFF;
INSERT INTO [Table] ([First_Name], [Last_Name])
VALUES (@First_Name, @Last_Name, )
Return @Num
Вот как выглядит мой стол.
CREATE TABLE [Table]
(
[First_Name] VARCHAR(50),
[Last_Name] VARCHAR(50),
[Num] AS ([dbo].[SetCMP]([Num]))
)
Я предполагаю, что ваш стол выглядит примерно так:
CREATE TABLE [Table]
(
[First_Name] VARCHAR(50),
[Last_Name] VARCHAR(50),
[Num] AS [First_Name] + [Last_Name] + '!'
)
Ваш С# должен быть в порядке. Измените хранимую процедуру на что-то вроде:
ALTER PROCEDURE [dbo].[usp_InsertSproc]
@First_Name VARCHAR(50),
@Last_Name VARCHAR(50)
AS
SET NOCOUNT OFF;
INSERT INTO [Table] ([First_Name], [Last_Name])
OUTPUT inserted.[Num]
VALUES (@First_Name, @Last_Name)
GO
EXEC [dbo].[usp_InsertSproc]
@First_Name = 'Tom',
@Last_Name = 'Hunter'
returnValue
.
@Num
? ?SELECT @Num
а не возвращать его.