2009-08-01 37 views
2

我需要一個用戶定義的函數來插入一條新記錄並返回Id,這是否可能,我該如何做?在SQL UDF中插入記錄並返回Id?

我試圖創建一個與INSERT語句的功能,但我收到以下錯誤:

Invalid use of the side-affecting operator 'INSERT' within a function. 

我使用SQL Server 2008

UPDATE SQL:

CREATE FUNCTION dbo.GetNewBookingReference() 

RETURNS int 

AS 

BEGIN 

INSERT INTO BookingReference 
(CreatedTime, CreatedByUserId) 
VALUES 
    (GETDATE() 
    ,10) 

RETURN @@IDENTITY 

END 

謝謝

+0

你能告訴我們你有什麼? – 2009-08-01 10:23:28

+0

我已經添加了我的sql – 2009-08-01 10:26:26

回答

8

在SQL Server中,用戶自定義函數不能更改數據庫狀態。您將必須使用具有OUTPUT參數的存儲過程。

0
insert into table1(name, age) values('xyz', 2); 
select SCOPE_IDENTITY() as NewID; 
0
   // Check if new identity is needed. 
       if (getId) 
       { 
        // Execute db specific autonumber or identity retrieval code 
        // SELECT SCOPE_IDENTITY() -- for SQL Server 
        // SELECT @@IDENTITY -- for MS Access 
        // SELECT MySequence.NEXTVAL FROM DUAL -- for Oracle 
        string identitySelect; 
        switch (DataProvider) 
        { 
         // Access 
         case "System.Data.OleDb": 
          identitySelect = "SELECT @@IDENTITY"; 
          break; 
         // Sql Server 
         case "System.Data.SqlClient": 
          identitySelect = "SELECT SCOPE_IDENTITY()"; 
          break; 
         // Oracle 
         case "System.Data.OracleClient": 
          identitySelect = "SELECT MySequence.NEXTVAL FROM DUAL"; 
          break; 
         default: 
          identitySelect = "SELECT @@IDENTITY"; 
          break; 
        } 
        command.CommandText = identitySelect; 
        id = int.Parse(command.ExecuteScalar().ToString()); 
       }