日期:2014-05-17  浏览次数:20571 次

SQL Server2005关于查询的存储过程,求高手解答--------------十万火急急急急急急急急急(标题要长)
我要写一个存储过程是一个查询语句,比如说:
create procedure getCust
as
select 这里是java程序里动态改变要查询的字段(因为业务要查得字段不固定,有可能是name,tel,address,也有可能是name,email,type) from t_cust
go
如果这个存储过程成立的话那java程序里又该怎么写?
哪位大虾知道的请帮我想想办法,感激不尽。
------最佳解决方案--------------------
create procedure getCust @col varchar(2000)
 as
begin
declare @sqlstr varchar(3000)
 set @sqlstr='select '+@col+'  from t_cust'
exec(@sqlstr)
end

--java 程序里调用时 传参 'a,b,c,d'  就是你想查的列串  就可以了
------其他解决方案--------------------
create procedure getCust(@str varchar(100))
as
begin
 exec('select '+@str+' from t_cust')
end
java调用sqlserver存储过程自己去搜,或者去java版问
------其他解决方案--------------------
引用:
我要写一个存储过程是一个查询语句,比如说:
create procedure getCust
as
select 这里是java程序里动态改变要查询的字段(因为业务要查得字段不固定,有可能是name,tel,address,也有可能是name,email,type) from t_cust
go
如果这个存储过程成立的话那java程序里又该怎么写?
哪位大虾知……

上面没说清楚,我是既不知道这个存储过程该怎么写也不知道java里又该怎么写。
------其他解决方案--------------------
引用:
create procedure getCust @col varchar(2000)
 as
begin
declare @sqlstr varchar(3000)
 set @sqlstr='select '+@col+'  from t_cust'
exec(@sqlstr)
end

--java 程序里调用时 传参 'a,b,c,d'  就是你想……


那我java里那个while里面这样存值的时候会报错的,因为如果没有查这个字段的话,根本拿不到这一列:
List<Collect> list=new ArrayList<Collect>();
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn=DriverManager.getConnection( "jdbc:sqlserver://127.0.0.1:1433;databaseName=Test", "sa","as");
PreparedStatement pstmt=conn.prepareStatement("{call dbo.getCollectbalance2(?)}");
String sqlstr=this.field_c_id+","+this.field_balance_seg1_id+","+this.field_balance_seg2_id;
pstmt.setString(1, sqlstr);
ResultSet rs=pstmt.executeQuery();
while (rs.next()) {
Collect c=new Collect();
c.setCId(rs.getInt(field_c_id));
c.setBalanceSeg1Id(rs.getString(this.field_balance_seg1_id));
c.setBalanceSeg2Id(rs.getString(this.field_balance_seg2_id));
list.add(c);
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getCId());
System.out.println(list.get(i).getBalanceSeg1Id());
System.out.println(list.get(i).getBalanceSeg2Id());
}
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();

this.result=list;
return "testProc";
我只想到一个一个属性去判断,有没更好的办法?
------其他解决方案--------------------
2个思路。
1,根据前台传入的参数在java里拼sql语句
2、创建一个多参的存储过程,再根据入参是否为空拼sql语句