我正在尝试创建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
我只是初学SQL,所以任何建议都会很棒!
答案 0 :(得分:7)
简而言之,不允许函数对任何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
你可以这么称呼它:
exec dbo.CreateUser 'Jim', 'Teddy', 'jim@do.not.email', 'Where', 'Here';