求教,在自定义函数中不能用exec呢?我只是想把刚插入记录的ID号(自增类型)返回

OverIsOver 2005-08-12 04:12:47
我的自定义函数是这样的:
fnHS_InsertCLI_VoucherCodeNum (
@ClientDB varchar(32),
@FinanceYear char(4),
@MonthPeriod varchar(4),
@TheDate varchar(20),
@CodeNum varchar(16),
@Digest varchar(64)
)
RETURNS int AS
BEGIN
declare @VoucherCodeNumID int
declare @sSQL varchar(1024)
set @sSQL='insert into '+@ClientDB+'..dbo.CLI_VoucherCodeNum_Y'+@FinanceYear
+'(MonthPeriod,TheDate,CodeNum,Digest) Values ('+@MonthPeriod+','''+@TheDate+''','''
+@CodeNum+''','''+@Digest+''')'
exec @sSQL
select @VoucherCodeNumID=scope_identity()
return (@VoucherCodeNumID)
END

调用的时候 fnHS_InsertCLI_VoucherCodeNum 'CDB_CSGSY_311','1998','1','2004-01-01','记-1','本月报关出口销售(2427kg)USD:4767'
却报告说 在 FUNCTION 内部,不允许进行远程函数调用。

请问,我该怎样把刚插入的ID号返回呢?因为涉及多用户同事操作,好象不能Select最大的ID号吧?
谢谢指点一二了 :)
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OverIsOver 2005-08-12
  • 打赏
  • 举报
回复
谢谢 tangqijun199,用了sp_executesql 后就解决了,原来EXECUTE 语句调用扩展存储过程,就是指的这个哦 :)
tangqijun199 2005-08-12
  • 打赏
  • 举报
回复
前面加create function
vivianfdlpw 2005-08-12
  • 打赏
  • 举报
回复
函数内部不能使用exec(@sql)
tangqijun199 2005-08-12
  • 打赏
  • 举报
回复
楼主试一下看这样写是不是就可以了。

fnHS_InsertCLI_VoucherCodeNum (
@ClientDB varchar(32),
@FinanceYear char(4),
@MonthPeriod varchar(4),
@TheDate varchar(20),
@CodeNum varchar(16),
@Digest varchar(64)
)
RETURNS int AS
BEGIN
declare @VoucherCodeNumID int
declare @sSQL nvarchar(1024)
set @sSQL='insert into '+@ClientDB+'..dbo.CLI_VoucherCodeNum_Y'+@FinanceYear
+'(MonthPeriod,TheDate,CodeNum,Digest) Values ('+@MonthPeriod+','''+@TheDate+''','''
+@CodeNum+''','''+@Digest+''')'
exec sp_executesql @sSQL
select @VoucherCodeNumID=scope_identity()
return (@VoucherCodeNumID)
END
OverIsOver 2005-08-12
  • 打赏
  • 举报
回复
我还是没大看懂楼上vivianfdlpw() 说的啊,因为我的SQL语句只能是动态生成的,不知道除了Exec还有没有其它方法来执行它呢?
简单的说,就是想把插入的新记录的自增ID返回,用scope_identity()或者@@identity 都可以取到,可关键是这条插入的语句怎样执行的问题哦~
ghostzxp 2005-08-12
  • 打赏
  • 举报
回复
SCOPE_IDENTITY
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

语法
SCOPE_IDENTITY( )
vivianfdlpw 2005-08-12
  • 打赏
  • 举报
回复
未在下面的列表中列出的语句不能用在函数主体中。
赋值语句。
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。

游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。

EXECUTE 语句调用扩展存储过程。

34,590

社区成员

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

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