Mssql中函数的执行问题


在使用MSSQLSERVER的时候, 创建了一个函数,这个函数中执行了动态SQL语句,
函数的创建成功,执行函数提示“ 只有函数和某些扩展存储过程才能从函数内部执行

然后,很多人告诉我,函数中不能执行动态sql,存储过程,函数比存储过程多很多限制.

但是,有一点不太明白, 执行函数的时候,参数在()中执行会提示上述错误,当参数不用()包括,竟然执行成功!

   
  --自增表
  
CREATE TABLE [IDENTITYTABLE]
(
KEYNAME VARCHAR(512),
KEYVALUE INT
)
GO

--获取自增的函数
CREATE FUNCTION FUN_GETIDENTITYID(@KEYNAME VARCHAR(512))
RETURNS INT
AS
BEGIN
DECLARE @KEYVALUE INT ,@SQL NVARCHAR(4000)
SELECT @KEYVALUE=KEYVALUE FROM IDENTITYTABLE WHERE KEYNAME = @KEYNAME

IF @KEYVALUE IS NULL
BEGIN
SET @KEYVALUE=1
SET @SQL = 'INSERT INTO IDENTITYTABLE VALUES('''+@KEYNAME+''',1)'
EXEC SP_EXECUTESQL @SQL
END
ELSE
BEGIN
SET @SQL= 'UPDATE IDENTITYTABLE SET KEYVALUE = ('+STR(@KEYVALUE)+'+1) WHERE KEYNAME ='''+@KEYNAME+''''
EXEC SP_EXECUTESQL @SQL
END
RETURN @KEYVALUE
END
GO

--执行报错
print dbo.FUN_GETIDENTITYID ('vvv')

--可以执行,并且动态sql执行成功,1行受影响
dbo.FUN_GETIDENTITYID 'vvv'

mssql mysql

新酱小苦逼 11 years, 7 months ago

Your Answer