日期:2014-05-16  浏览次数:20621 次

sqlserver 中如何创建组合查询?求急
create table Cars
(
CarID int primary key identity(1,1) not null, --主键
CarType nvarchar(50) not null, --汽车类型
Factory nvarchar(50) not null, --生产厂商
Years int not null, --入库年限
SellPrice int not null, --销售价格
[date] datetime not null, --入库日期
[Status] nvarchar(4)  --状态
);
go

--创建组合查询存储过程
create proc p_selectGroup
@CarType nvarchar(50),
@Factory nvarchar(50),
@Years int,
@Status nvarchar(4)
as
declare @where varchar(200),@str varchar(200)
set @where =' where 1=1 '
if @CarType<>''
set @where =@where +' and CarType = @CarType '
if @Factory<>''
set @where = @where +' and Factory = @Factory '
if @Years<>''
set @where = @where +' and Years = @Years '
if @Status<>''
set @where = @where +' and Status = @Status '
set @str = 'select * from Cars' + @where
go

--执行存储过程
exec p_selectGroup '','英国产商','',''

表 和 存储过程 如上,
【问题】:我想要弄一个组合查询的存储过程,但貌似我上面写好的用不了, 我执行查询的时候查询不出来, 求大虾帮个忙解决一下,谢谢。

在C# winfrom 中 (UI ,BLL ,DAL)三层架构也不怎么懂用组合查询的存储过程写,有空的大虾帮下忙哈!有点急用
------解决方案--------------------
变量要单独放在外面拼接哦。
不知下面这个是不是你想要的:
--创建组合查询存储过程
alter proc p_selectgroup
@cartype nvarchar(50),
@factory nvarchar(50),
@years int,
@status nvarchar(4)
as
declare @where varchar(200),@str varchar(200),@quotes varchar(200)
select @where =' where 1=1 ',@quotes = ''''
if @cartype<>''
set @where =@where +' and cartype =' + @quotes + @cartype + @quotes
if @factory<>''
set @where = @where +' and factory = '  + @quotes + @factory + @quotes
if @years<>''
set @where = @where +' and years =' + ltrim(@years)
if @status<>''
set @where = @where +' and status = ' + @quotes + @status + @quotes
set @str = 'select * from cars' + @where
print @str;
exec (@str)
go

------解决方案--------------------
组合查询就是根据你传入存储过程的参数来拼接要执行的SQL

create proc p_selectGroup
@CarType nvarchar(50),
@Factory nvarchar(50),
@Years int,
@Status nvarchar(4)
as
declare @where varchar(200),@str varchar(200)
set @where =' where 1=1 '
if @CarType<>''
set @where =@where +' and CarType = @CarType '
if @Factory<>''
set @where = @where +' and Factory = @Factory '
if @Years<>''
set @where = @where +' and Years = @Years '
if @Status<>''
set @where = @where +' and Status = @Status '
set @str =&nb