如何在SQL函数中插入insert语句?

时间:2016-05-11 06:42:27

标签: sql-server

这是我正在尝试的功能

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

如果可能的话,请让我知道替代方式。

2 个答案:

答案 0 :(得分:1)

插入在SQL函数中不起作用,您的函数将给出以下错误。

  

服务器:消息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 :(得分: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'