WangZWang(阿来) 的方法 很不错啊,我就是这样做多样查询的,给你个现成的STORE PROCEDURE做参考
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N'Pos_ListarPos'
AND type = 'P')
DROP PROCEDURE Pos_ListarPos
GO
CREATE PROCEDURE Pos_ListarPos
@StrXMLDatos VARCHAR(8000) AS
sexo NUMERIC,
estadoCivil NUMERIC,
nacimiento VARCHAR(10),
licencia NUMERIC,
titulo numeric,
edad numeric
)
EXEC sp_xml_removedocument @idoc
BEGIN
SET @strSelect = ''
SET @strFrom = ''
SET @strSQL = ''
SET @strSelect=''
SET @strWhere=' where id_pos<> '''+ ''''
SET @strSelect ='SELECT a.* '
SET @strFrom = ' from PosI_Ficha a '
if @pais<>0
set @strFrom=@strFrom+' ,admin.dbo.detCodSys b '
set @strWhere =@strWhere+' and pais= '+ cast(@pais as varchar)
+' and '+ cast(@pais as varchar) + ' =b.idCodDet '
if @ciudad<>0
set @strSelect=@strSelect+' ,c.descCodDet as ciudad '
if @ciudad<>0
set @strFrom=@strFrom+' ,admin.dbo.detCodSys c '
if @ciudad<>0
set @strWhere=@strWhere+' and ciudad= '+cast(@ciudad as varchar)
+' and '+ cast(@ciudad as varchar) + ' =c.idCodDet '
if @sexo<>0
set @strSelect=@strSelect+' ,d.descCodDet as sexo '
set @strFrom=@strFrom+' ,admin.dbo.detCodSys d '
set @strWhere=@strWhere+' and sexo= '+cast(@sexo as varchar)
+' and '+ cast(@sexo as varchar) + ' =d.idCodDet '
if @estadoCivil<>0
set @strSelect=@strSelect+' ,e.descCodDet as estadoCivil '
set @strFrom=@strFrom+' ,admin.dbo.detCodSys e '
set @strWhere=@strWhere+' and estadoCivil= '+cast(@estadoCivil as varchar)
+' and '+ cast(@estadoCivil as varchar) + ' =e.idCodDet '
if @licencia<>0
set @strSelect=@strSelect+' ,g.descCodDet as licencia '
set @strFrom=@strFrom+' ,admin.dbo.detCodSys g '
set @strWhere=@strWhere+' and licencia = '+ cast(@licencia as varchar) +' and '+
cast(@licencia as varchar)+ ' = g.idCodDet'
if @titulo<>0
set @strWhere=@strWhere+' and titulo= '+ cast(@titulo as varchar)
if @edad<>0
set @strWhere=@strWhere+' and DATEDIFF("m",convert(varchar,nacimiento,103),convert (varchar,getdate(),103))/12<= '
+ cast(@edad as varchar)
SET @strSQL = @strSelect + @strFrom + @strWhere
--SELECT a.* ,c.descCodDet as ciudad from PosI_Ficha a ,admin.dbo.detCodSys b ,admin.dbo.detCodSys c where id_pos<> '' and pais= 53 and 53 =b.idCodDet and ciudad= 56 and 56 =c.idCodDet
--SELECT * from PosI_Ficha where id_pos<> '' and DATEDIFF("m",convert(varchar,nacimiento,103),convert (varchar,getdate(),103))/12= 0
END
--print @strSQL
EXEC (@strSQL)