我有两张这样的表:
Table_Registration
Table_login
我同时在两个表中插入相同的数据,但我想如果数据插入到一个表中而其他数据不会插入意味着那么我需要一个例外。
这是我的存储过程。
PROCEDURE [dbo].[Insert_UserInformation]
(@FullName varchar(300),
@FatherName varchar(300),
@DOB varchar(50),
@PlaceofBirth varchar(200),
@EmailId varchar(300),
@Address varchar(300),
@State varchar(150),
@Password varchar(50),
@Role varchar(50),
@Status varchar(200) output)
AS
BEGIN
DECLARE @COUNT1 INT, @COUNT2 int
SELECT @COUNT1 = COUNT(*)
FROM Table_Registraiton
WHERE EmailId = @EmailId
SELECT @COUNT2 = COUNT(*)
FROM Table_login
WHERE EmailId = @EmailId
IF(@COUNT1 > 0 or @COUNT2 > 0)
BEGIN
SET @Status = 'Duplicate'
END
ELSE if(@COUNT1 = 0 AND @COUNT2 = 0)
BEGIN
INSERT INTO Table_Registration(FullName, FatherName, DOB, PlaceofBirth,
EmailId, Address, State)
VALUES (@FullName, @FatherName, @DOB, @PlaceofBirth,
@EmailId, @Address, @State)
INSERT INTO Table_login (Name, EmailId, Password, Role)
VALUES (@FullName, @EmailId, @Password, @Role)
SET @Status = 'Success'
END
END
我的问题是,如果数据已插入Table_Registration
而未插入Table_login
,那么我需要状态中的异常作为输出参数。
答案 0 :(得分:1)
您应该使用事务来确保如果数据未插入到一个表中,则整个操作将失败。这样你就不会有不一致的数据。
你可以这样实现:
BEGIN TRANSACTION AddUserLogin
INSERT INTO Table_Registration(FullName, FatherName, DOB, PlaceofBirth, EmailId, Address, State)
VALUES (@FullName, @FatherName, @DOB, @PlaceofBirth, @EmailId, @Address, @State)
IF @@Error <> 0
BEGIN
SET @Status = 'ERROR: There was a problem when creating the registration record.'
ROLLBACK TRANSACTION AddUserLogin
RETURN -1
END
INSERT INTO Table_login (Name, EmailId, Password, Role)
VALUES (@FullName, @EmailId, @Password, @Role)
IF @@Error <> 0
BEGIN
SET @Status = 'ERROR: There was a problem when creating the login record.'
ROLLBACK TRANSACTION AddUserLogin
RETURN -1
END
-- this part will only run if there are no errors above. All the inserts above are only permanently committed to the database at this point.
COMMIT TRANSACTION AddUserLogin
SET @Status = 'Success'
答案 1 :(得分:1)
我认为,如果你因为任何原因不想插入,那么为此提出异常是个坏主意。你可以简单回滚并且不要插入并返回合适的输出来指示proc中发生的事情
尝试这样的事情,(如果有任何suntax错误,请更正)
String str = "These Two\u00A0words";
mail.setSubject(str ,"UTF-8");
答案 2 :(得分:0)
无需使用输出参数来获取客户端的状态,您可以使用RaiseError
首先在一次交易中包装你的插页..
Begin Tran
INSERT INTO Table_Registration(FullName, FatherName, DOB, PlaceofBirth,
EmailId, Address, State)
VALUES (@FullName, @FatherName, @DOB, @PlaceofBirth,
@EmailId, @Address, @State)
INSERT INTO Table_login (Name, EmailId, Password, Role)
VALUES (@FullName, @EmailId, @Password, @Role)
Set @status='Success'
Commit tran
然后在Catch块中,使用RaiseError
Begin Catch
RAISERROR('Insert Failed',16,1)
End Catch