我写了个取自动编号的小函数,不知道哪里错了?
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 '。
请问我的函数哪里错了?应该怎样改正?请指点,谢谢!
------解决方案--------------------函数里不支持动态sql的执行。建议改成存储过程。
------解决方案----------------------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
------解决方案--------------------使用存储过程。
------解决方案--------------------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