PB用OLE DB调用SQL SERVER带DATETIME 参数的自定义函数问题

himaernew 2007-03-30 02:06:52
在SQL SERVER 2000中创建自定义函数(返回值为TABLE):
CREATE FUNCTION UDF_TEST (@ADT_NOW DATETIME)
RETURNS @T_RET TABLE (AAA DATETIME)
AS
BEGIN
INSERT INTO @T_RET VALUES(@ADT_NOW)
RETURN
END

在查询分析器中调用是正确的, 如:
declare @adt_now datetime
set @adt_now = getdate()
select *
from dbo.udf_test(@adt_now)

但在PB中就不行了, 如
Long ll_count
DateTime ldt_now = DateTime(today())

SELECT COUNT(*)
INTO :ll_count
FROM DBO.UDF_TEST(:ldt_now);

SQLERRTEXT错误提示:
SQLSTATE = 42000
Microsoft OLE DB Provider for SQL Server
第 1 行: '{' 附近有语法错误。

PB试过PB9.0.3 B8836, PB10.2.1 B9761, 各位碰到过吗? 如何处理的?
...全文
358 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
himaernew 2007-03-30
  • 打赏
  • 举报
回复
在SP中用DATETIME参数, 好象没问题.

我现在的解决办法是, 自定义函数不变, 在PB中调用时不传递DATATIME类型参数, 传STRING参数,
如在DATAWINDOW中把ADT_NOW声明成STRING参数, 在SQL 语名中也用STRING参数, 就不会出错了.

himaernew 2007-03-30
  • 打赏
  • 举报
回复
用SP很麻烦的, 因为这个函数中有一大堆代码, 我要先检测有没有相关数据, 再调用这个函数生成DW数据. 如用自定义函数我就可以用:
SELECT COUNT(*)
INTO :LL_COUNT
FROM DBO.UDF_TEST(:ADT_NOW)
IF LL_COUNT > 0 THEN
....
END IF
如果用存储过程, 就麻烦了.
嘘嘘兔 2007-03-30
  • 打赏
  • 举报
回复
没用过PB9和OLE DB
实在不行你就在SQL SERVER 2000中写个SP,在SP中使用函数dbo.udf_test
然后在PB中调用SP

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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