ALTER PROCEDURE dbo.GetBasicDataQuery
@sqlstr char(255)AS
SET NOCOUNT ON

DECLARE @Str nVARCHAR(4000)
SET @Str='SELECT * FROM BasicInfo WHERE 1=1  -----####
                   ('+@sqlstr+') 
                   UNION ALL (SELECT * FROM disposebasicinfo WHERE 1=1 ----####
                    ('+@sqlstr+')'
EXEC(@Str)  ----####
RETURN

解决方案 »

  1.   

    --其实最主要是看你的条件是怎么传递过来的--如果传递的条件是类似这样: bh=1 and id=1
    ALTER PROCEDURE dbo.GetBasicDataQuery
    @sqlstr char(255)AS
    SET NOCOUNT ON

    DECLARE @Str nVARCHAR(4000)
    SET @Str='SELECT * FROM BasicInfo WHERE 1=1 and ('+@sqlstr+') 
    UNION ALL (SELECT * FROM disposebasicinfo WHERE 1=1 and ('+@sqlstr+')'
    EXEC sp_ExecuteSql @Str
    RETURN
    go--或者:
    ALTER PROCEDURE dbo.GetBasicDataQuery
    @sqlstr char(255)AS
    SET NOCOUNT ON

    DECLARE @Str nVARCHAR(4000)
    SET @Str='SELECT * FROM BasicInfo '
    +case when @sqlstr>'' then 'WHERE ('+@sqlstr+') ' else '' end+'
    UNION ALL (SELECT * FROM disposebasicinfo '
    +case when @sqlstr>'' then 'WHERE ('+@sqlstr+') ' else '' end
    EXEC sp_ExecuteSql @Str
    RETURN
    go
      

  2.   


    --如果传递的条件是类似这样: and bh=1 and id=1
    ALTER PROCEDURE dbo.GetBasicDataQuery
    @sqlstr char(255)AS
    SET NOCOUNT ON

    DECLARE @Str nVARCHAR(4000)
    SET @Str='SELECT * FROM BasicInfo WHERE 1=1  ('+@sqlstr+') 
    UNION ALL (SELECT * FROM disposebasicinfo WHERE 1=1 ('+@sqlstr+')'
    EXEC sp_ExecuteSql @Str
    RETURN
    go
      

  3.   

    CREATE PROCEDURE dbo.GetBasicDataQuery
        @sqlstr NVARCHAR(255)
    AS
    BEGIN
        SET NOCOUNT ON
        DECLARE @Str NVARCHAR(4000)
        SET @Str=N'SELECT * FROM BasicInfo WHERE ('+@sqlstr+N') UNION ALL (SELECT * FROM disposebasicinfo WHERE ('+@sqlstr+N')'
        EXEC sp_ExecuteSql @Str
        RETURN
    END