2016-05-11 3 views
1

Вот моя функция, которую я пытаюсьКак поместить инструкцию insert в функцию SQL?

CREATE FUNCTION [dbo].[CreateNewRow] 
(@pFirstName VARCHAR(50), @pLastName VARCHAR(50)) 
RETURNS INT 
AS 
BEGIN 

INSERT INTO [dbo].[Student] ([FirstName], [LastName]) 
VALUES (@pFirstName, @pLastName) 

RETURN SCOPE_IDENTITY() 
END 
GO 

Пожалуйста, дайте мне знать альтернативный путь, если это возможно.

+0

Это поведение не поддерживается. Проверьте наличие хранимых процедур ... 'Недопустимое использование оператора боковой обработки INSERT внутри функции.' – Devart

+2

Операции DML в функциях SQL Server не допускаются, вы можете использовать хранимые процедуры. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/79be4014-3a05-4b48-a723-ac7888ff59df/why-dml-operations-are-not-allowed-in-functions-in-sql- сервер? форум = transactsql –

ответ

1

Вставка не будет работать в функции SQL. Ваша функция будет ниже ошибки.

Сервер: Msg 443, уровень 16, состояние 2, процедура CreateNewRow, строка 7 Неправильное использование 'INSERT' в функции.

Альтернативное использование функции, определенной пользователем, который использует команду INSERT, но модифицированный таблица представляет собой таблицу локальной переменной функции:

CREATE FUNCTION [dbo].[Ins_GetMaxValue] 
(@pInt1 INT, @pInt2 INT, @pInt3 INT, @pInt4 INT) 
RETURNS INT 
AS 
BEGIN 
DECLARE @IntTable TABLE ([IntValue] INT) 
DECLARE @MaxValue INT 

INSERT INTO @IntTable ([IntValue]) VALUES (@pInt1) 
INSERT INTO @IntTable ([IntValue]) VALUES (@pInt2) 
INSERT INTO @IntTable ([IntValue]) VALUES (@pInt3) 
INSERT INTO @IntTable ([IntValue]) VALUES (@pInt4) 

SELECT @MaxValue = MAX([IntValue]) 
FROM @IntTable 

RETURN @MaxValue 
END 
GO 
1

Попробуйте использовать хранимые процедуры

CREATE PROCEDURE [dbo].[CreateNewRow] @pFirstName VARCHAR(50) 
    ,@pLastName VARCHAR(50) 
AS 
BEGIN 
    INSERT INTO [dbo].[Student] (
     [FirstName] 
     ,[LastName] 
     ) 
    VALUES (
     @pFirstName 
     ,@pLastName 
     ) 

    SELECT SCOPE_IDENTITY() 
END 
GO 

К Вызовите свою сохраненную процедуру

EXEC CreateNewRow @pFirstName = 'Xxx' 
    ,@pLastName = 'Yyy' 
Смежные вопросы