【发布时间】:2019-12-10 15:45:49
【问题描述】:
我遇到了一个关于应该将数据插入三个表的 SQL Server 过程的问题。下面的代码显示该过程接收参数,然后将所述参数插入三个表中:Address 表、D.O.B 表和Users 表。
忽略与其他东西有关的盐,我的问题是,当我从 ASP.NET MVC 文件运行此过程时,没有任何内容插入到 Users 表中,即使 Address 和 @ 987654326@ 表都插入了各自的值。我之前遇到过这样的问题,但问题已解决,因为问题是当我对其使用 HASHBYTES 过程时,其中一个值返回 NULL,但是,我认为没有什么可以做类似的事情。
ALTER PROCEDURE [dbo].[StoreDetails]
@FirstName VARCHAR(50),
@Surname VARCHAR(50),
@Password VARCHAR(100),
@PhoneNumber VARCHAR(50),
@Email VARCHAR(100),
@IsAdmin BIT,
@Address VARCHAR(100),
@DOB DATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @Salt UNIQUEIDENTIFIER = NEWID()
INSERT INTO dbo.OAddress(Address)
VALUES (@Address)
INSERT INTO dbo.ODOB(DOB)
VALUES (@DOB)
INSERT INTO dbo.OUsers (FirstName, Surname, Password, Salt, PhoneNumber, Email, IsAdmin, AddressID, DOBID)
VALUES (@FirstName, @Surname, @Password, @Salt, @PhoneNumber, @Email, @IsAdmin, SCOPE_IDENTITY(), SCOPE_IDENTITY())
END
我相信 C# 方面确实按预期工作,不久前我设法让这段代码工作,直到我更改存储过程以尝试更改 Password 参数以使用 HASHBYTES 进行散列但是我决定只是恢复到它正常工作的时候,但你可以看到我失败了。
【问题讨论】:
-
您可能遇到外键违规。您正在使用 SCOPE_IDENTITY 作为地址和 DOB id,这不太可能是您想要的。
-
您是否尝试从 Sql Server Management Studio 调用此 SP?
-
您一定是从 SQL 服务器端收到错误,从 SQL 服务器管理工作室运行程序以了解确切的问题,该问题可能是由于外键限制。
-
您对上一次插入中的那 两个
SCOPE_IDENTITY()调用有何期望?这看起来很腥...... -
@marc_s 调用 SCOPE_IDENTITY() 过程是因为它是一种获取分配给 OUser 表中实体的正确外键的复杂方式。
标签: c# sql-server model-view-controller