我写了个取自动编号的小函数,不知道哪里错了?

zzy9903 2007-01-29 10:39:16
CREATE FUNCTION UDF_GetIncCode (@TableName varchar(20),@FieldName varchar(20))
RETURNS
integer
AS
BEGIN
/*取自动累加的序号*/
declare @sql varchar(200),@Code integer

set @sql = 'select @@Code = ' + @FieldName + ' From ' + @TableName
exec(@sql)
set @Code = IsNull(@Code,0) + 1

set @sql = 'Update ' + @TableName + ' set ' + @FieldName + ' = ' + cast(@Code as varchar)
exec(@sql)
return @Code
END

我保存的时候提示说:在函数内不正确地使用了 'EXECUTE'。
请问我的函数哪里错了?应该怎样改正?请指点,谢谢!
...全文
355 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzy9903 2007-01-31
  • 打赏
  • 举报
回复
谢谢
tanweibiao2000 2007-01-30
  • 打赏
  • 举报
回复
declare @Code int
exec SP_GetIncCode 'TIncCode','SaleShipD',@Code
select @Code as Code

咦?我这样写取回的结果为啥总是null呢?而数据库中的字段已经累加了

应该为这样:
declare @Code int
exec SP_GetIncCode 'TIncCode','SaleShipD',@Code output
select @Code as Code
zzy9903 2007-01-29
  • 打赏
  • 举报
回复
declare @Code int
exec SP_GetIncCode 'TIncCode','SaleShipD',@Code
select @Code as Code

咦?我这样写取回的结果为啥总是null呢?而数据库中的字段已经累加了
panjinfu80 2007-01-29
  • 打赏
  • 举报
回复
使用存储过程。
marco08 2007-01-29
  • 打赏
  • 举报
回复
--再汗自己一个

--try


CREATE proc UDF_GetIncCode (@TableName varchar(20), @FieldName varchar(20), @Code int output)
AS
BEGIN
/*取自动累加的序号*/
declare @sql nvarchar(2000)

set @sql = 'select @Code = ' + @FieldName + ' From ' + @TableName
exec sp_executesql @sql, N'@Code int output', @Code output
set @Code = IsNull(@Code,0) + 1

set @sql = 'Update ' + @TableName + ' set ' + @FieldName + ' = ' + cast(@Code as varchar)
exec(@sql)
END
marco08 2007-01-29
  • 打赏
  • 举报
回复
--汗自己一个

--try


CREATE proc UDF_GetIncCode (@TableName varchar(20), @FieldName varchar(20), @Code int output)
RETURNS
integer
AS
BEGIN
/*取自动累加的序号*/
declare @sql nvarchar(2000),@Code integer

set @sql = 'select @Code = ' + @FieldName + ' From ' + @TableName
exec sp_executesql @sql, N'@Code int output', @Code output
set @Code = IsNull(@Code,0) + 1

set @sql = 'Update ' + @TableName + ' set ' + @FieldName + ' = ' + cast(@Code as varchar)
exec(@sql)
END
marco08 2007-01-29
  • 打赏
  • 举报
回复
--try

CREATE FUNCTION UDF_GetIncCode (@TableName varchar(20),@FieldName varchar(20))
RETURNS
integer
AS
BEGIN
/*取自动累加的序号*/
declare @sql nvarchar(2000),@Code integer

set @sql = 'select @Code = ' + @FieldName + ' From ' + @TableName
exec sp_executesql @sql, N'@Code int output', @Code output
set @Code = IsNull(@Code,0) + 1

set @sql = 'Update ' + @TableName + ' set ' + @FieldName + ' = ' + cast(@Code as varchar)
exec(@sql)
return @Code
END
ashzs 2007-01-29
  • 打赏
  • 举报
回复
函数里不支持动态sql的执行。建议改成存储过程。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧