日期:2014-05-17  浏览次数:20708 次

sql server 获取指定区间行的所有信息
alter proc getFrontMultipleRecords 
@startingRow int,    --起始行
@terminaRow int,    --终止行
@queryCondition nvarchar(50)                   --查询条件
as
begin
select *
from (select row_number() over (order by sgi.factoryNumber) as rowNum,sgi.* from
SellGoodsInfo as sgi Inner join ManufacturerInfo as mfi on sgi.factoryNumber = mfi.factoryNumber 
Inner join GoodsType as gt on sgi.goodsTypeId = gt.goodsTypeId
where
sgi.goodsName like '%'+@queryCondition+'%')
as tbl where rowNum between @startingRow and @terminaRow
end
go
 怎么将 begin select * 的* 改为
sgi.goodsBarCode,sgi.goodsName,gt.goodsType,sgi.costPrice,mfi.factoryName,sgi.goodsNo,sgi.storageAlarm
 就会报这样的错误的消息 8156,级别 16,状态 1,过程 getFrontMultipleRecords,第 7 行
多次为 'tbl' 指定了列 'factoryNumber'。

------解决方案--------------------
alter proc getFrontMultipleRecords 
@startingRow int,    --起始行
@terminaRow int,    --终止行
@queryCondition nvarchar(50)                   --查询条件
as
begin
select *
from (
select row_number() over (order by sgi.factoryNumber) as rowNum,
sgi.goodsBarCode,
sgi.goodsName,
gt.goodsType,
sgi.costPrice,
mfi.factoryName,
sgi.goodsNo,
sgi.storageAlarm 
from SellGoodsInfo as sgi 
Inner join ManufacturerInfo as mfi on sgi.factoryNumber = mfi.factoryNumber 
Inner join GoodsType as gt on sgi.goodsTypeId = gt.goodsTypeId
where sgi.goodsName like '%'+@queryCondition+'%'
) as tbl where rowNum between @startingRow and @terminaRow
end
go

------解决方案--------------------
你的select * 是从tbl中选取,其中包含rowNum 以及所有sgi的列。
把新代码中sgi. , gt. , mfi. 都改成 tbl. , 并且在tbl中添加相关的gt.goodsType,mfi.factoryName列即可。
------解决方案--------------------
好像不太对,你的SellGoodsInfo表,别名为sgi,这么写sgi.* 应该不会有重复的呀