当前位置: 代码迷 >> SQL >> sqlserver 中的nvarchar 和varchar 导致的全表搜索及死锁有关问题
  详细解决方案

sqlserver 中的nvarchar 和varchar 导致的全表搜索及死锁有关问题

热度:67   发布时间:2016-05-05 14:34:03.0
sqlserver 中的nvarchar 和varchar 导致的全表搜索及死锁问题。
我的程序代码如下。sqlserver2008数据库,表T_USER.USERNAME 类型为varchar(50)。用sqlserver 的profiler工具查看到

sqlserver实际接受到的username的参数值为  N'kk'.USERNAME为主键,由于传入参数类型为nvarchar而实际字段类型类型为varchar,导致对全表的scan,而非seek。  业务忙时为照成死锁问题。
有没有好的解决方法。将字段类型修改成nvarchar不算。



		try {			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");			Connection con = DriverManager.getConnection(					"jdbc:sqlserver://oradb:1433;DatabaseName=MYDB;", "sa",					"sa123456");			PreparedStatement ps = con					.prepareStatement("select * from T_USER where USERNAME=?");			ps.setString(1, "kk");			ResultSet rs = ps.executeQuery();		} catch (Exception ex) {			ex.printStackTrace();		}
  相关解决方案