无效使用副作用操作符' INSERT'

时间:2014-08-26 10:37:46

标签: sql-server

CREATE FUNCTION insertrecord(@id int, @location varchar(20)) 

RETURNS INT
AS
BEGIN
    INSERT Into [dbo].[Location] (Id,Emploc)values(@id,@location)
    RETURN SCOPE_IDENTITY()
END
GO

上面的代码给出了以下错误

  

Msg 443,Level 16,State 15,Procedure insertrecord,Line 11   在函数中无效使用副作用运算符“INSERT”。

2 个答案:

答案 0 :(得分:0)

问题是你打算如何使用它。但你应该有一个SP:

CREATE PROCEDURE insertrecord(@id int, @location varchar(20)) 

AS
BEGIN
    INSERT Into [dbo].[Location] (Id,Emploc)values(@id,@location)
    SELECT SCOPE_IDENTITY()
END
GO

答案 1 :(得分:0)

我找到了一种使用INSERT在函数中制作UPDATEDELETExp_cmdshell的方法。

所以你只需要替换@sql变量中的代码。

CREATE FUNCTION [dbo].[_tmp_func](@orderID NVARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @sql varchar(4000), @cmd varchar(4000)
SELECT @sql = 'INSERT INTO _ord (ord_Code) VALUES (''' + @orderID + ''') '
SELECT @cmd = 'sqlcmd -S ' + @@servername +
              ' -d ' + db_name() + ' -Q "' + @sql + '"'
EXEC master..xp_cmdshell @cmd, 'no_output'
RETURN 1
END