ALTER proc [dbo].[proc_Select_File]
@columnName varchar(30), --是种类的列,多个就用','塥开
@beforeTime varchar(60), --前面时间
@afterTime varchar(60), --后面时间
@compositorColumn varchar(30), --排序列
@brforeRange int, --前面的筛选(数量或金额)
@afterRange int, --后面的筛选(数量或金额)
@ascOrDesc varchar(30) --排序方式
as
declare @sql nvarchar(max)
set @sql='
with newTable as
(
select '+@columnName+',sum(Amount),sum(Amount*Price) from dbo.vw_Order_Item
where OrderID in
(
select OrderID from dbo.tb_Orders where StatusID=2
)
and SaleDate between '+''''+@beforeTime+''''+' and '+''''+@afterTime+''''+'
group by '+@columnName+'
having '+@compositorColumn+' between '+Convert(varchar(30),@brforeRange)+' and '+Convert(varchar(30),@afterRange)+' --范围的限定
order by '+@compositorColumn+' '+@ascOrDesc+' --排序列与排序方式
)
select count(1) from newTable
'
exec sp_executeSQL @sql
我用以下数据来执行exec proc_Select_File
@columnName='BrandName,SaleDate',
@beforeTime='1999-12-20',
@afterTime='2009-12-20',
@compositorColumn='sum(Amount)',
@brforeRange=1,
@afterRange=50,
@ascOrDesc='asc'
解决方案 »
- 求一个集合的差集
- 这个sql怎么写
- update触发器该怎么写?
- 請問如何取得存儲過程在執行時返回的異常呢?
- 请教一个IN的问题(oracle可以执行,但是sql server不行)。
- 请教各位关于SQL SERVER安装在WINDOWS 2003操作系统上的问题
- 求助备份语句!
- 新人求教如何利用返回的多个值作为参数查询下一个数据
- 在客户端通过ODBC连接SQL SERVER7,总提示找不到服务器,为何?(服务器刚装好,是不是要那些设置)由于分不多系统只能给22分,可怜可怜我吧!!
- sql server 只能导出框架吗?
- 有没有数据库熟悉的朋友想来微软外包干
- 请教:将多个相同格式sql语句用case语句整合一下
=> between '''+Convert(varchar(30),@brforeRange)+''' and '''+Convert(varchar(30),@afterRange)+'''
在exec sp_executeSQL @sql 之前print @sql 然后在查询分析器里分析看看
ALTER proc [dbo].[proc_Select_File]
@columnName varchar(30), --是种类的列,多个就用','塥开
@beforeTime varchar(60), --前面时间
@afterTime varchar(60), --后面时间
@compositorColumn varchar(30), --排序列
@brforeRange int, --前面的筛选(数量或金额)
@afterRange int, --后面的筛选(数量或金额)
@ascOrDesc varchar(30) --排序方式
as
declare @sql nvarchar(max)
set @sql='
with newTable as
(
select '+@columnName+',sum(Amount),sum(Amount*Price) from dbo.vw_Order_Item
where OrderID in
(
select OrderID from dbo.tb_Orders where StatusID=2
)
and SaleDate between '+''''+@beforeTime+''''+' and '+''''+@afterTime+''''+'
group by '+@columnName+'
having '+@compositorColumn+' between '+Convert(varchar(30),@brforeRange)+' and '+Convert(varchar(30),@afterRange)+' --范围的限定
order by '+@compositorColumn+' '+@ascOrDesc+' --排序列与排序方式
)
select count(1) from newTable
'
PRINT @sql
exec sp_executeSQL @sql
(
select BrandName,SaleDate,sum(Amount),sum(Amount*Price) from dbo.vw_Order_Item
where OrderID in
(
select OrderID from dbo.tb_Orders where StatusID=2
)
and SaleDate between '1999-12-20' and '2009-12-20'
group by BrandName,SaleDate
having sum(Amount) between 1 and 50 --范围的限定
order by sum(Amount) asc --排序列与排序方式
)
select count(1) from newTable
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
select * from newTable order by Amount asc
没有为 'newTable' 的列 3 指定任何列。
消息 8155,级别 16,状态 2,第 2 行
没有为 'newTable' 的列 4 指定任何列。
@columnName varchar(30), --是种类的列,多个就用','塥开
@beforeTime varchar(60), --前面时间
@afterTime varchar(60), --后面时间
@compositorColumn varchar(30), --排序列
@brforeRange int, --前面的筛选(数量或金额)
@afterRange int, --后面的筛选(数量或金额)
@ascOrDesc varchar(30) --排序方式
as
declare @sql nvarchar(max)
set @sql='
with newTable as
(
select top 100 percent '+@columnName+',sum(Amount),sum(Amount*Price) from dbo.vw_Order_Item
where OrderID in
(
select OrderID from dbo.tb_Orders where StatusID=2
)
and SaleDate between '+''''+@beforeTime+''''+' and '+''''+@afterTime+''''+'
group by '+@columnName+'
having '+@compositorColumn+' between '+Convert(varchar(30),@brforeRange)+' and '+Convert(varchar(30),@afterRange)+' --范围的限定
order by '+@compositorColumn+' '+@ascOrDesc+' --排序列与排序方式
)
select count(1) from newTable
'
exec sp_executeSQL @sql
没有为 'newTable' 的列 3 指定任何列。
消息 8155,级别 16,状态 2,第 2 行
没有为 'newTable' 的列 4 指定任何列。
sum(Amount),sum(Amount*Price) 这两个没有赋列名...改为上面的
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
所以加上TOP, TOP 100 PERCENT 也是返回全部数据
举个简单的例子吧--这句失败
SELECT * FROM (SELECT * FROM sys.tables ORDER BY name)x
--这句成功
SELECT * FROM (SELECT TOP 100 PERCENT * FROM sys.tables ORDER BY name)x
SELECT * FROM (SELECT TOP 100 PERCENT * FROM sys.tables ORDER BY name)这个SELECT * FROM 没有表名都可以查询的?