在我的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.
吗?
答案 0 :(得分:2)
不幸的是,与几乎所有其他对象不同,DB函数必须使用T-SQL中的模式名称进行完全限定。
如果你以编程方式将语句放在一起,你可以破解它以查看JDBC驱动程序是否是MSSQL,在这种情况下,添加模式名称。
答案 1 :(得分:1)