Вставить запись и вернуть идентификатор в SQL UDF? - PullRequest
2 голосов
/ 01 августа 2009

Мне нужна определенная пользователем функция для вставки новой записи и возврата идентификатора, это возможно и как мне это сделать?

Я попытался создать функцию с помощью оператора вставки, но получаю следующую ошибку:

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

Я использую SQL Server 2008.

ОБНОВЛЕНИЕ SQL:

CREATE FUNCTION dbo.GetNewBookingReference()

RETURNS int

AS

BEGIN

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

RETURN @@IDENTITY

END

Спасибо

Ответы [ 3 ]

8 голосов
/ 01 августа 2009

В SQL Server пользовательские функции не могут изменять состояние базы данных. Вам придется использовать хранимую процедуру с параметром OUTPUT.

0 голосов
/ 23 февраля 2011
                // 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());
                }
0 голосов
/ 01 августа 2009
insert into table1(name, age) values('xyz', 2);
select SCOPE_IDENTITY() as NewID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...