日期:2014-05-18  浏览次数:20361 次

union 在存储过程中的应用
CREATE       PROCEDURE   Pro_SelectTable
@TblN   VarChar(8000),
@SelectWhere   VarChar(8000)
AS  
Declare   @SqlStr   VarChar(8000)  
Declare   @Pointpre   int
Declare   @Pointcur   int
Declare   @Tbcur   varchar(100)
SET   @Pointpre=1
SET   @Pointcur=1
SET   @Tbcur= ' '
SET   @SqlStr= ' '

IF     @TblN <> ' '
    BEGIN
      SET   @Pointcur=charindex( ', ',@TblN,@Pointpre)
     
      IF   @Pointcur=0
          SET   @SqlStr=@SqlStr+Char(9)+ 'Select   *     from '+char(9)+@TblN   /*就一个查询表的情况*/
      ELSE
          BEGIN
          WHILE   (@Pointcur <> 0)
          BEGIN
          SET   @Pointcur=charindex( ', ',@TblN,@Pointpre)
          IF   @Pointcur <> 0

          SET   @Tbcur=substring(@TblN,@Pointpre,@Pointcur-@Pointpre)   /*得到非最后一个查询表的名字*/
          ELSE
          SET   @Tbcur=substring(@TblN,@Pointpre,LEN(@TblN)-@Pointpre+1)   /*得到最后一个查询表的名字*/
          SET   @Pointpre=@Pointcur+1
         
          IF   @SqlStr <> ' '

          SET   @SqlStr=@SqlStr+Char(9)+   UNION     ALL   +Char(9)+ 'Select   *     from '+char(9)+@Tbcur

          ELSE
         
          SET   @SqlStr=@SqlStr+Char(9)+ 'Select   *     from '+char(9)+@Tbcur
         
          CONTINUE
          END
          END    
    END
/*IF   @SelectWhere <> ' '
          SET   @SqlStr=@SqlStr+Char(9)+ 'Where '+Char(9)+@SelectWhere
*/
exec(@SqlStr)


==============
服务器:   消息   156,级别   15,状态   1,过程   Pro_SelectTable,行   35
在关键字   'UNION '   附近有语法错误。


请各位大虾帮忙,不胜感激!

------解决方案--------------------
CREATE PROCEDURE Pro_SelectTable
@TblN VarChar(8000),
@SelectWhere VarChar(8000)
AS
Declare @SqlStr VarChar(8000)
Declare @Pointpre int
Declare @Pointcur int
Declare @Tbcur varchar(100)
SET @Pointpre=1
SET @Pointcur=1
SET @Tbcur= ' '
SET @SqlStr= ' '

IF @TblN <> ' '
BEGIN
SET @Pointcur=charindex( ', ',@TblN,@Pointpre)

IF @Pointcur=0
SET @SqlStr=@SqlStr+Char(9)+ 'Select * from '+char(9)+@TblN /*就一个查询表的情况*/
ELSE
BEGIN
WHILE (@Pointcur <> 0)
BEGIN
SET @Pointcur=charindex( ', ',@TblN,@Pointpre)
IF @Pointcur <> 0

SET @Tbcur=substring(@TblN,@Pointpre,@Pointcur-@Pointpre) /*得到非最后一个查询表的