我有一个存储过程:
CREATE PROCEDURE [dbo].[BrandDrugDetailsInsert]
@BrandDrugDetailsID uniqueidentifier OUTPUT,
@BrandDrugID uniqueidentifier
AS
BEGIN
INSERT INTO Pharmacy_BrandDrugDetails(BrandDrugID) OUTPUT INSERTED.BrandDrugDetailsID
VALUES (@BrandDrugID)
END
任何时候我尝试使用:
来修复值“@BrandDrugDetailsID”param[0] = new SqlParameter("@BrandDrugDetailsID", SqlDbType.UniqueIdentifier);
param[0].Direction = ParameterDirection.Output;
.
.
.
identity = new Guid(param[0].Value.ToString());
我得到一个空值。
如果我尝试在SQL Server本身中执行存储过程,则返回三个值:
我无法弄清楚我做错了什么。请帮帮我。
答案 0 :(得分:2)
我相信当您在INSERT语句中使用OUTPUT子句时,这些行将作为结果集返回。因此,不要在存储过程中使用OUTPUT参数,只需运行YourSqlCommand.ExecuteScalar(),BrandDrugDetailsID就会出现。
答案 1 :(得分:2)
您没有对INSERTED.BrandDrugDetailsID位执行任何操作,而该位实际上会将其放在@BrandDrugDetailsID变量中。您必须输出OUTPUT到表变量然后手动将值写入@BrandDrugDetailsID,或者只是使用ExecuteScalar来访问过程当前返回的单个值。
答案 2 :(得分:0)
您确定存储过程正常吗? INSERTED.BrandDrugDetailsID
的值如何使其成为输出参数@BrandDrugDetailsID
?
DECLARE @TableVar Table (@NewBrandDrugDetailsID uniqueidentifier)
INSERT INTO Pharmacy_BrandDrugDetails(BrandDrugID) OUTPUT INSERTED.BrandDrugDetailsID INTO @TableVar
VALUES (@BrandDrugID)
SELECT @BrandDrugDetailsID = @NewBrandDrugDetailsID FROM @TableVar
**免责声明,我没有测试过这个! **
答案 3 :(得分:0)
对于使用Entityframework 6或更低版本的用户,您需要做的就是:
using (var db = new AppEntity)
{
var BrandDrugDetailsID = db.BrandDrugDetailsInsert(BrandDrugID).FirstOrDefault();
}