Tag: sql server

在Microsoft sql server中连接/附加不同的表

Hai我在MS SQL SERVER的数据库中有3个不同的表。 LAB_patientreg patient_master patient_address 该LAB_patientreg和patient_master是包含患者详细信息的两个表(两个表中的患者不同, LAB_patientreg是关于直接在实验室注册的患者的表,而患者_master是关于在患者或患者在接待处登记到医院的患者 )和patient_address是包含在表patient_master中登记的患者的地址的表。 在某些情况下,我需要所有患者的数据,包括LAB_patientreg和patient_master以及patient_address 。 我的目的是创建一个视图,其中包含此表中的所有值(即,如果patient_master有50行, LAB_patientreg有32行,结果视图应该是82行),并且列的数量和类型仅限于LAB_patientreg的数量和类型但它不起作用,是否有可能像我说的那样创建一个视图? 如果不是我该怎么做才能获得这样的观点? 在此先感谢帮助我。 表的结构如下, patient_master CREATE TABLE [dbo].[patient_master]( [pid] [int] IDENTITY(1,1) NOT NULL, [date_created] [date] NULL, [title] [varchar](25) NULL, [fname] [varchar](255) NULL, [mname] [varchar](255) NULL, [lname] [varchar](255) NULL, [addr_id] [int] NULL, [sex] [char](1) NULL, [dob] [date] NULL, [dobType] [tinyint] NULL, [marital_status] [int] NULL, […]

用于MS SQL Server的JBoss AS 5数据库连接池重新连接例程

当从JBoss AS 5到DB的连接暂时丢失时,我想提出重新连接到MS SQL Server的最佳方法。 对于Oracle,我发现了这个问题: “当连接变坏时,有没有办法让JBoss连接池重新连接到Oracle?” 它表示它使用Oracle特定的ping例程,并利用JBoss’Configuration Datasources Wiki中描述的valid-connection-checker-class-name属性。 我想避免的是每次从池中提取连接时都运行另一个SQL,这是另一个属性check-valid-connection-sql基本上做的。 所以现在,我倾向于使用exception排序器类名称的方法,但我不确定这是否是MS SQL Server的最佳方法。 希望听到您对该主题的建议。 谢谢!

com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围:(

我在java中有以下代码 qry=”insert into usr_auth(usrid,username,password,email) values(?,?,?,?)”; ps=con.prepareStatement(qry); ps.setString(1,getUniqueID()); ps.setString(2,newUp.getUsrName()); ps.setString(3,newUp.getPwd()); ps.setString(4,newUp.getEmail()); ps.executeUpdate(); 这段代码给了我一个IndexOutOfBoundsException : 发现数据库exception 很抱歉给您带来不便 exception详细信息:com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围。 细节: 指数2超出范围。 堆栈跟踪: com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:700)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue (SQLServerPreparedStatement.java:709)位于javax的RegUser.doPost(RegUser.java:13)的DBOps.addUser(DBOps.java:55)的com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1034) .servlet.http.HttpServlet.service(HttpServlet.java:641)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:30)的javax.servlet.http.HttpServlet.service(HttpServlet.java:722) )org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)org.apache.catalina.core.StandardContextValve。在org.apache中调用(StandardContextValve.java:164)。 catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 100)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:403)org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:286)at org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process(Http11AprProtocol.java:272)at at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1730)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)at java.util.concurrent.ThreadPoolExecutor $ Worker.run java.lang.Thread.run上的(未知来源)(未知来源) 在数据库中,我有4列usrid, username, password, email username是nvarchar(MAX)类型。 一切似乎都很好,但我仍然得到这个例外为什么? [stacktrace中的第55行是ps.setString行(2,newUp.getUsrName());]

如何在JBoss中配置SQL Server数据源以使用特定的Active Directory用户进行连接?

JBoss作为Active Directory用户ABC\appuser 。 我想以AD用户ABC\dbuser连接到MS SQL Server 8.0数据库。 使用参数integratedSecurity=true ,除非我在连接URL上指定user=ABC\dbuser;password=dbpass ,否则系统将尝试连接为服务AD用户ABC\appuser 。 根据这个问题 ,我已经确认通过使用以下url,当以ABC\appuser运行应用程序时,我可以作为ABC\dbuser连接到数据库: jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass 不幸的是,当我在JBoss配置xml( JBoss\jboss-eap-6.1.0\standalone\configuration\standalone.xml )中设置数据源的url时,如下所示: jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass sqlserver 1 10 true 我无法使用此警告创建池资源: WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (JCA PoolFiller) IJ000610: Unable to fill pool: javax.resource.ResourceException: Could not create connection 设置user-name和password XML条目的值会创建类似的故障警告。 我目前的解决方案选项似乎是以下任何一种: 扩展JBoss用于创建此数据源的任何类,将其替换为按预期应用connection-url值的自定义类或 将JBoss改为ABC\dbuser或 通过直接访问或将其添加到具有访问权限的AD组,为JBoss服务用户ABC\appuser数据库访问提供访问权限。 这些变通办法都不是优选的; 必须有一个更优雅,被接受的解决方案。 我该如何解决这个问题?

java.sql.SQLException:I / O错误:SSO失败:本机SSPI库

我有两个Web应用程序需要在Tomcat 6,MS SQL 2008和JTDS-1.2.2上作为驱动程序运行。 如果我只启动一个Web应用程序,一切正常,但是一旦我启动第二个,我就会收到以下错误(订单无关紧要): java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library 当然,库ntlmauth.dll位于C:\WINDOWS\system32 似乎第二个启动的应用程序无法找到单点登录的ntlmauth.dll 。

更新到Apple Java for Mac OS X 10.6 update 6后,sqljdbc4挂起

最新的Apple Java for Mac OS X 10.6更新6挂起我的mssql jdbc驱动程序(sqljdbc4.jar),有没有其他人遇到这个问题? 任何修复? 有人知道恢复更新5的方法吗?

Java:插入表日期时间数据

我试图在MS-SQL数据库中插入一个变量当前的日期和时间。 我用这种格式: DateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”); Calendar cal = Calendar.getInstance(); System.out.println(dateFormat.format(cal.getTime())); 我得到了这个结果2013-01-28 09:29:37.941 我在数据库中的字段是定义datetime ,正如我在其他具有相同字段的表中看到的那样,日期和时间的编写方式与2011-07-05 14:18:33.000完全相同。 我尝试使用我在java程序中执行的查询插入数据库,但是我收到此错误 SQLexception:状态:S0003消息:将varchar数据类型转换为值的日期时间数据类型超出范围。 错误:242 我的查询是这样的: query = “INSERT INTO Companies CreatedOn”+ “VALUES (‘” + dateFormat.format(cal.getTime()) + “‘)” 但我不明白我做错了什么。

JDBC SQL SERVER:该语句未返回结果集

我正在从Microsoft SQL Server Studio执行以下查询,该查询工作正常并显示结果: SELECT * INTO #temp_table FROM md_criteria_join WHERE user_name = ‘tecgaw’ UPDATE #temp_table SET user_name = ‘tec’ WHERE user_name != ‘tec’ SELECT * FROM md_criteria_join WHERE user_name = ‘tec’ AND view_name NOT IN (SELECT view_name FROM md_criteria_join WHERE user_name = ‘tecgaw’) UNION SELECT * FROM #temp_table ORDER BY view_name, user_name, crit_usage_seq, crit_join_seq […]

MS-SQL Server,JDBC和XA事务的exception

我尝试执行XA事务时,在日志中遇到以下exception: javax.transaction.xa.XAException:com.microsoft.sqlserver.jdbc_SQLServerException:无法创建XA控件连接。 错误:“对象’xp_sqljdbc_xa_init_ex’,数据库’master’架构’dbo’上的EXECUTE权限被拒绝 我按照这些教程了解XA事务和如何使MSSQL Server XA数据源工作? 在完成第一个教程之后,我还在SSMS中运行了以下命令: 使用主GO EXEC sp_addrolemember [SqlJDBCXAUser],’MyUserName’GO 我还要补充说我跑了 使用主GO EXEC sp_grantdbaccess’MyUserName’,’MyUserName’GO validation用户是否有权访问主数据库,并且出现“用户已存在于当前数据库中”的错误。 最后,我通过SSMSvalidation了角色SqlJDBCXAUser确实具有关于xp_sqljdbc_xa_init_ex EXECUTE。 我使用的数据库显然不是master而是myDBName 。 关于这个问题,两者之间唯一的关联是MyUserName是myDBName的所有者,并且作为master的用户存在。 我的服务器在Windows XP SP3上运行(因此第一个教程中提到的修补程序不相关,因为它适用于XP SP2及其下,我知道当我尝试运行此修补程序时)。 有人遇到过这个问题吗? 我真的很感激一些线索。 谢谢, 以太 更新: 我再次看了Microsoft的第一个教程,有两个段落,我不确定它们是什么意思,它们可能包含解决方案: 在将参与分布式事务的每个SQL Server实例上执行数据库脚本xa_install.sql。 此脚本安装由sqljdbc_xa.dll调用的扩展存储过程。 这些扩展存储过程实现了Microsoft SQL Server JDBC驱动程序的分布式事务和XA支持。 您需要以SQL Server实例的管理员身份运行此脚本。 当他们说SQL Server instance ,他们是否意味着包含几个数据库的sql server,包括master和myDBName (我习惯于oracle术语有点不同)? 我按照给出的那样运行了一次xa_install.sql脚本,并指出use master 。 这是第二段: 配置用户定义的角色 要授予特定用户使用JDBC驱动程序参与分布式事务的权限,请将用户添加到SqlJDBCXAUser角色。 例如,使用以下Transact-SQL代码将名为“shelby”的用户(名为“shelby”的SQL标准登录用户)添加到SqlJDBCXAUser角色: USE master […]

存储过程通过Java运行速度比直接在数据库上运行慢30%

我正在使用Java 1.6,JTDS 1.2.2(也只是尝试1.2.4无效)和SQL Server 2005来创建CallableStatement来运行存储过程(没有参数)。 我看到运行相同存储过程的Java包装器比使用SQL Server Management Studio慢30%。 我运行MS SQL分析器,两个进程之间的I / O差别不大,所以我认为它与查询计划缓存无关。 存储的proc不带参数,也不返回任何数据。 它使用服务器端游标来计算填充表所需的值。 我无法看到从Java调用存储过程如何增加30%的开销,当然它只是数据库的一个管道,SQL被发送下来然后数据库执行它….数据库是否可以提供Java应用不同的查询计划? 我已发布到MSDN论坛和sourceforge JTDS论坛(主题:“在JTDS中存储过程比在DB中更直接”)我想知道是否有人有任何关于为什么会发生这种情况的建议? 提前致谢, -詹姆士 (NB不要害怕,我会在找到解决方案后整理其他论坛中的所有答案) Java代码段: sLogger.info(“Preparing call…”); stmt = mCon.prepareCall(“SP_WB200_POPULATE_TABLE_limited_rows”); sLogger.info(“Call prepared. Executing procedure…”); stmt.executeQuery(); sLogger.info(“Procedure complete.”); 我已经运行了sql profiler,并发现了以下内容: Java app:CPU:466,514阅读次数:142,478,387撰写:284,078期限:983,796 SSMS:CPU:466,973阅读次数:142,440,401写作:280,244持续时间:769,851 (两个DBCC DROPCLEANBUFFERS在分析之前运行,并且都产生正确的行数) 所以我的结论是他们都执行相同的读写操作,只是他们这样做的方式不同,你们怎么想? 事实certificate,不同客户端的查询计划明显不同(Java客户端在插入期间更新索引,而不是在更快的SQL客户端中,执行连接的方式也不同(嵌套循环Vs.收集流,嵌套循环Vs索引扫描,唉!))。 这就是为什么,我还不知道(当我到底时,我会重新发帖) 结语 我无法让它正常工作。 我尝试在Java和Mgmt studio客户端之间对连接属性( arithabort , ansi_nulls等)进行同质化。 它最终导致两个不同的客户端具有非常相似的查询/执行计划(但仍然具有不同的实际plan_ids)。 我发布了我在MSDN SQL Server论坛上发现的内容摘要,因为我发现不仅在JDBC客户端和管理工作室之间,而且在Microsoft自己的命令行客户端SQLCMD之间有不同的性能,我还检查了一些更激进的事情,如网络流量也可以将存储的proc包装在另一个存储过程中,只是为了咧嘴笑。 […]