求一个通用的查询存储过程
想写一个通用的查询存储过程   
 1,表名不确定 
 2,字段名不确定 
 3,字段类型不确定 
 4,字段个数不确定   
 至少要实现前3个条件 
 SQL大概描述一下:   
 SelectID   =   1 
 SelectName   =    "ClassID "   或者   SelectName   =    "name "   或者   SelectName   =    "ClassID,name " 
 SelectTable   =    "Table "   
 Select    '+SelectName+ '   From    '+SelectTable+ '   Where   ID= '+SelectID   + '
------解决方案--------------------还应该加一个 
 6.显示的列也不确定
------解决方案--------------------create proc xx 
 @f1 varchar(50), 
 @f2 varchar(50), 
 @f3 varchar(50), 
 @tb varchar(50) 
 as 
 exec( 'select  '+@f1+ ', '+@f2+ ', '+@f3+ ' from  '+@tb)
------解决方案--------------------/* 
  功能描述: 通用分页显示查询 
     条件:表中不存在标示递增字段 
  输入参数: 
     @tblName:  表名   
     @strGetFields: 需要返回的列  '* ':返回所以列信息 
     @fldName:  排序的字段名 
     @OrderType:  设置排序类型, 非 0 值则降序 
     @PageSize:  页尺寸 
     @PageIndex:  页码 
     @doCount:  返回记录总数, 非 0 值则返回 
     @strOrderBy: 缺省排序字段信息 (注意: 不要加 ORDER BY) 
         格式: Field1 DESC,Field2 ASC, 
     @strWhere:  查询条件 (注意: 不要加 WHERE) 
  输出参数: @RecordCount: 记录总数 
  作    者: ningfeiyang 
  创建时间: 2005-01-19 
  更改纪录: 
 */ 
 ALTER PROCEDURE Pagination2 
  ( 
   @tblName   varchar(255), 
   @strGetFields varchar(1000) =  '* ', 
   @fldName varchar(255) =  ' ', 
   @PageSize   int = 10, 
   @PageIndex  int = 1, 
   @doCount  bit = 0, 
   @OrderType bit = 0, 
   @strOrderBy varchar(500) =  ' ', 
   @strWhere  varchar(1500) =  ' ', 
   @RecordCount int output 
  ) 
 AS 
  DECLARE @strSQL   varchar(5000)       -- 主语句 
  DECLARE @strTmp   varchar(200)        -- 临时变量 
  DECLARE @strOrder varchar(400)        -- 排序变量   
  --如果@doCount传递过来的不是0,就执行总数统计 
  IF (@doCount != 0) 
  BEGIN 
   DECLARE @sWhere varchar(2000)     
   SET @sWhere =  ' ' 
   IF (@strWhere !=  ' ') 
    SET @sWhere =  ' WHERE  ' + @strWhere      
   SET @strSQL =  'if exists (select * from dbo.sysobjects where id = object_id( ' '[dbo].[tmpTable] ' ') and OBJECTPROPERTY(id,  ' 'IsUserTable ' ') = 1)  ' 
   SET @strSQL = @strSQL +  ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [ ' + @tblName +  ']  ' + @sWhere +  ')  ' 
   SET @strSQL = @strSQL +  ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [ ' + @tblName +  ']  ' + @sWhere      
   EXEC (@strSQL)     
   SELECT @RecordCount=Total FROM tmpTable     
   --删除总数统计临时表 
   EXEC ( 'DROP TABLE tmpTable ') 
  END    
  --PRINT @RecordCount    
  --如果@OrderType不是0,就执行降序 
  IF (@OrderType != 0) 
  BEGIN 
   SET @strTmp =  '  < (SELECT MIN ' 
   SET @strOrder =  ' ORDER BY  ' + @strOrderBy +  '[ ' + @fldName +  '] DESC ' 
  END 
  ELSE 
  BEGIN 
   SET @strTmp =  ' >  (SELECT MAX ' 
   SET @strOrder =  ' ORDER BY  ' + @strOrderBy +  '[ ' + @fldName +  '] ASC ' 
  END   
  --如果是第一页就执行以上代码,这样会加快执行速度 
  IF @PageIndex = 1 
  BEGIN 
   IF @strWhere !=  ' '    
    SET @strSQL =  'SELECT TOP  ' + str(@PageSize) +  '  ' + @strGetFields +  '  FROM [ ' + @tblName +  '] WHERE  ' + @strWhere +  '  ' + @strOrder