2013-05-10 96 views
4

我想创建SQL函数,它会添加到表中的条目。在添加新用户之前,我想检查一下,或者此用户不在表格中。我写了一些代码,但不能保存,因为我得到的错误:在功能内无效使用侧面影响的处理器'INSERT'。函数中包含的最后一个语句必须是返回语句。写SQL插入函数

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 [email protected] and [email protected])) 
      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

SQL函数不能修改数据库。您需要改用存储过程。 – RBarryYoung 2013-05-10 01:45:33

回答

6

简而言之,函数不允许对任何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 [email protected] and [email protected])) 
      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', '[email protected]', 'Where', 'Here'; 
+0

令人惊叹,谢谢! – Mantas 2013-05-10 08:20:17