在不指定模式的情况下调用MSSQL函数

时间:2011-06-10 07:51:34

标签: java sql-server stored-procedures

在我的Java程序中,我必须调用一个名为FooBar(null)的存储过程。该程序试图独立于数据库平台。一些SQL语句以编程方式组合在一起,其中之一是:

insert into foo_bar (id, user, timestmp) values (1, 'foo', FooBar(null));

这适用于Oracle,HSLQDB,MySQL。现在我必须使它在MSSQL上运行。我创建了FooBar函数。我使用具有名为foo的默认架构的用户登录数据库。

仅当我将模式名称放在函数名称前面时,此语句才有效:

insert into foo_bar (id, user, timestmp) values (1, 'foo', foo.FooBar(null));

如果我登录数据库,那么exec FooBar(null)无法使用foo. 你知道如何在MSSQL上避免这个foo.吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,与几乎所有其他对象不同,DB函数必须使用T-SQL中的模式名称进行完全限定。

如果你以编程方式将语句放在一起,你可以破解它以查看JDBC驱动程序是否是MSSQL,在这种情况下,添加模式名称。

答案 1 :(得分:1)

您可以尝试synonym例如

CREATE SYNOMYM FooBar FOR foo.FooBar;

如果失败了,那你就不幸了......