我有一个表,其中有一列是根据表中的其他列自动生成的。我试图使用存储过程将数据插入表中,然后返回自动生成列。在下面的存储过程中,@Num
表示自动生成的列。
我在这里采用的方法适用于将数据插入数据库。什么不起作用是从@Num
存储过程返回Insert
。是我想做的事情。如果是这样,我做错了什么?如果没有,是否有另一种方法可以实现这一目标?
这是我的C#。当我运行它时,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]))
)
答案 0 :(得分:2)
我假设你的桌子看起来像这样:
CREATE TABLE [Table]
(
[First_Name] VARCHAR(50),
[Last_Name] VARCHAR(50),
[Num] AS [First_Name] + [Last_Name] + '!'
)
你的C#应该没问题。将存储过程更改为:
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'