2013-05-10 86 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