检查已提交的事务,如果是 return 一个值
Check transaction committed and if so return a value
我想在 table 个用户中插入一个新用户(电子邮件地址)。如果成功(无重复),将新用户的基本配置插入其他tables,并return一些数据到客户端。如果不成功,在C#项目的dataset中收到相关通知。
这是示例代码,您可以轻松地对其发表评论
ALTER PROCEDURE [dbo].[CreateUser]
@Email nvarchar(256),
@Password nvarchar(256)
AS
BEGIN
declare @UserID uniqueidentifier;
declare @ConfigID uniqueidentifier;
declare @TopMostNode uniqueidentifier;
BEGIN TRANSACTION;
select @UserID = NEWID();
select @ConfigID = newid();
insert into Users (UserID,Email,Password,CurrentConfig)
values(@UserID, @Email, @Password, @ConfigID);
INSERT INTO Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
VALUES (@ConfigID,@UserID, 'Default Config', 1);
COMMIT TRANSACTION
END
这是一种可能,您 return 一个包含您需要的数据的记录集和一个指示用户是否已经存在的标志。
alter procedure [dbo].[CreateUser]
(
@Email nvarchar(256)
, @Password nvarchar(256)
)
as
begin
declare @UserID uniqueidentifier, @ConfigID uniqueidentifier, @TopMostNode uniqueidentifier, @UserExists bit = 0;
select @UserID = UserID, @UserExists = 1 from Users where Email = @Email;
if @UserExists = 0 begin
begin transaction;
set @UserID = newid();
set @ConfigID = newid();
insert into Users (UserID, Email, [Password], CurrentConfig)
values (@UserID, @Email, @Password, @ConfigID);
insert into Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
values (@ConfigID, @UserID, 'Default Config', 1);
commit transaction
end
-- Return whether the user already exists or not and the user id
select @UserExists, @UserId
return 0;
end
向应用程序 return 发送数据的另一种方法是使用 output
参数,例如
alter procedure [dbo].[CreateUser]
(
@Email nvarchar(256)
, @Password nvarchar(256)
, @UserId uniqueidentifier out
, @UserExists bit out
)
as
begin
declare @ConfigID uniqueidentifier, @TopMostNode uniqueidentifier;
set @UserExists = 0;
select @UserID = UserID, @UserExists = 1 from Users where Email = @Email;
if @UserExists = 0 begin
begin transaction;
set @UserID = newid();
set @ConfigID = newid();
insert into Users (UserID, Email, [Password], CurrentConfig)
values (@UserID, @Email, @Password, @ConfigID);
insert into Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
values (@ConfigID, @UserID, 'Default Config', 1);
commit transaction
end
return 0;
end
该代码即将完成。只需要添加一个 SELECT 到 return 的新键。如果出现错误,您将获得异常。例如:
ALTER PROCEDURE [dbo].[CreateUser]
@Email nvarchar(256),
@Password nvarchar(256)
AS
BEGIN
declare @UserID uniqueidentifier;
declare @ConfigID uniqueidentifier;
declare @TopMostNode uniqueidentifier;
BEGIN TRANSACTION;
select @UserID = NEWID();
select @ConfigID = newid();
insert into Users (UserID,Email,Password,CurrentConfig)
values(@UserID, @Email, @Password, @ConfigID);
INSERT INTO Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
VALUES (@ConfigID,@UserID, 'Default Config', 1);
COMMIT TRANSACTION
select @UserID UserID, @ConfigID ConfigID;
END
我想在 table 个用户中插入一个新用户(电子邮件地址)。如果成功(无重复),将新用户的基本配置插入其他tables,并return一些数据到客户端。如果不成功,在C#项目的dataset中收到相关通知。
这是示例代码,您可以轻松地对其发表评论
ALTER PROCEDURE [dbo].[CreateUser]
@Email nvarchar(256),
@Password nvarchar(256)
AS
BEGIN
declare @UserID uniqueidentifier;
declare @ConfigID uniqueidentifier;
declare @TopMostNode uniqueidentifier;
BEGIN TRANSACTION;
select @UserID = NEWID();
select @ConfigID = newid();
insert into Users (UserID,Email,Password,CurrentConfig)
values(@UserID, @Email, @Password, @ConfigID);
INSERT INTO Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
VALUES (@ConfigID,@UserID, 'Default Config', 1);
COMMIT TRANSACTION
END
这是一种可能,您 return 一个包含您需要的数据的记录集和一个指示用户是否已经存在的标志。
alter procedure [dbo].[CreateUser]
(
@Email nvarchar(256)
, @Password nvarchar(256)
)
as
begin
declare @UserID uniqueidentifier, @ConfigID uniqueidentifier, @TopMostNode uniqueidentifier, @UserExists bit = 0;
select @UserID = UserID, @UserExists = 1 from Users where Email = @Email;
if @UserExists = 0 begin
begin transaction;
set @UserID = newid();
set @ConfigID = newid();
insert into Users (UserID, Email, [Password], CurrentConfig)
values (@UserID, @Email, @Password, @ConfigID);
insert into Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
values (@ConfigID, @UserID, 'Default Config', 1);
commit transaction
end
-- Return whether the user already exists or not and the user id
select @UserExists, @UserId
return 0;
end
向应用程序 return 发送数据的另一种方法是使用 output
参数,例如
alter procedure [dbo].[CreateUser]
(
@Email nvarchar(256)
, @Password nvarchar(256)
, @UserId uniqueidentifier out
, @UserExists bit out
)
as
begin
declare @ConfigID uniqueidentifier, @TopMostNode uniqueidentifier;
set @UserExists = 0;
select @UserID = UserID, @UserExists = 1 from Users where Email = @Email;
if @UserExists = 0 begin
begin transaction;
set @UserID = newid();
set @ConfigID = newid();
insert into Users (UserID, Email, [Password], CurrentConfig)
values (@UserID, @Email, @Password, @ConfigID);
insert into Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
values (@ConfigID, @UserID, 'Default Config', 1);
commit transaction
end
return 0;
end
该代码即将完成。只需要添加一个 SELECT 到 return 的新键。如果出现错误,您将获得异常。例如:
ALTER PROCEDURE [dbo].[CreateUser]
@Email nvarchar(256),
@Password nvarchar(256)
AS
BEGIN
declare @UserID uniqueidentifier;
declare @ConfigID uniqueidentifier;
declare @TopMostNode uniqueidentifier;
BEGIN TRANSACTION;
select @UserID = NEWID();
select @ConfigID = newid();
insert into Users (UserID,Email,Password,CurrentConfig)
values(@UserID, @Email, @Password, @ConfigID);
INSERT INTO Configs (ConfigID, OwnerID, DisplayName, LastPrintID)
VALUES (@ConfigID,@UserID, 'Default Config', 1);
COMMIT TRANSACTION
select @UserID UserID, @ConfigID ConfigID;
END