作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些像这样的 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
但这没有帮助,当我运行查询时我得到了一个丢失的对象异常(因为我假设这些在 dbo 下查找)。因为我知道所有查询都将在架构 abc
上运行,所以有什么方法可以更新查询吗?
最佳答案
These are the available connection properties适用于 Microsoft JDBC 4.0 驱动程序。我在此列表中没有看到 currentSchema
,也没有看到任何允许您在连接字符串中指定特定模式的驱动程序。
由于您不想使用模式更新 SQL,您可以创建 synonyms在每个对象的默认 (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
语句。如果您使用它,则需要在执行前更新变量值并检查语句。没有明示或暗示的保证:)
-- 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;
关于java - 如何在 jboss 数据源 url 中指定 sql server 的当前模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820696/
我是一名优秀的程序员,十分优秀!