如何在jboss数据源URL中指定sql server的当前架构?

我有一些像这样的SQL查询

select user_id from table_user where lower(email_address)=? and password=? 

最近更新了应用程序的架构,但我真的不想更新应用程序中的每个SQL查询。 有没有办法从JBOSS连接端指定当前的Schema?

旧连接: jdbc:sqlserver://myserver:1433;DatabaseName=db尝试: jdbc:sqlserver://myserver:1433;DatabaseName=db;currentSchema=abc

我尝试使用currentSchema但没有帮助,我在运行查询时得到一个丢失的对象exception(因为我认为这些是在dbo下查看)。 是否有任何方法可以更新查询,因为我知道所有查询都将在模式abc上运行?

这些是 Microsoft JDBC 4.0驱动程序的可用连接属性 。 我没有在此列表中看到currentSchema ,也没有看到任何允许您在连接字符串中指定特定模式的驱动程序。

由于您不希望使用模式更新SQL,因此可以为每个对象在默认(dbo)模式中创建同义词 。 例如:

 USE tempdb; GO -- create test schema CREATE SCHEMA test AUTHORIZATION dbo; GO -- create table in test schema CREATE TABLE test.tablename (columnname int null); -- select from tablename in default schema will fail SELECT * FROM tablename; GO -- create synonym mapping test.tablename to dbo.tablename CREATE SYNONYM [dbo].[tablename] FOR [server].[tempdb].[test].[tablename] -- -- select from tablename synonym will succeed SELECT * FROM tablename; -- cleanup DROP SYNONYM [dbo].[tablename]; DROP TABLE [test].[tablename]; DROP SCHEMA [test]; 

您可以使用以下代码为用户对象生成CREATE SYNONYM语句。 如果使用它,则需要在执行前更新变量值和查看语句。 没有保certificate示或暗示:)

 -- generate create synonym statements for user objects DECLARE @FromSchema SYSNAME = 'abc', @ToSchema SYSNAME = 'dbo', @ServerName SYSNAME = 'server', @DatabaseName SYSNAME = 'database'; SELECT 'CREATE SYNONYM ' + QUOTENAME(@ToSchema) + '.' + QUOTENAME(name) + ' FOR ' + QUOTENAME(@ServerName) + '.' + QUOTENAME(@DatabaseName) + '.' + QUOTENAME(@FromSchema) + '.' + QUOTENAME(name) + ';' FROM sys.objects WHERE is_ms_shipped = 0;