Man*_*tas 4 sql database scalar function insert
我正在尝试创建SQL函数,它将向表中添加条目.在添加新用户之前,我想检查一下,或者此用户已经不在表中.我写了一些代码,但由于我收到错误而无法保存:在函数内无效使用副作用opreator'INSERT'.函数中包含的最后一个语句必须是return语句.
CREATE FUNCTION [dbo].[CreateUser]
(
@Username varchar(20),
@Password varchar(20),
@Email varchar(50),
@PasswordQuestion varchar(30),
@PasswordAnswer varchar(30)
)
RETURNS bit/* datatype */
AS
BEGIN
if (Exists(Select Username from Users where Username=@Username and Password=@Password))
return 1;
else
begin
INSERT INTO dbo.Users (Username, Password,
Email, UserId,
IsApproved, IsLockedOut,
IsOnline, CreationDate,
PasswordQuestion, PasswordAnswer) VALUES (@Username, @Password, @Email,
1, 0, 0, 0, GetDate(),
@PasswordQuestion, @PasswordAnswer);
return 0;
end
END
Run Code Online (Sandbox Code Playgroud)
我只是初学SQL,所以任何建议都会很棒!
简而言之,不允许函数对任何SQL Server对象进行任何更改.存储过程可以.通过微小的更改,您的代码现在是SP.
CREATE PROC [dbo].[CreateUser]
(
@Username varchar(20),
@Password varchar(20),
@Email varchar(50),
@PasswordQuestion varchar(30),
@PasswordAnswer varchar(30)
)
--RETURNS bit/* datatype */
AS
BEGIN
if (Exists(Select Username from Users where Username=@Username and Password=@Password))
return 1;
else
begin
INSERT INTO dbo.Users (Username, Password,
Email, UserId,
IsApproved, IsLockedOut,
IsOnline, CreationDate,
PasswordQuestion, PasswordAnswer) VALUES (@Username, @Password, @Email,
1, 0, 0, 0, GetDate(),
@PasswordQuestion, @PasswordAnswer);
return 0;
end
END
GO
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它:
exec dbo.CreateUser 'Jim', 'Teddy', 'jim@do.not.email', 'Where', 'Here';
Run Code Online (Sandbox Code Playgroud)