如今面临如下问题:存储过程如下:create proc sp_GetTopThing
@count int,
@size intasselect top @size * from message where id not in(select top @count id from message order by(id) desc) order by(id) desc
当执行的时候会出问题,该怎么解决啊..也就是 @size就是我们的查询的前N条数据,@count表示已经查询过的message表中的数据...解决此问题者给高分.....越详细越好...
@count int,
@size intasselect top @size * from message where id not in(select top @count id from message order by(id) desc) order by(id) desc
当执行的时候会出问题,该怎么解决啊..也就是 @size就是我们的查询的前N条数据,@count表示已经查询过的message表中的数据...解决此问题者给高分.....越详细越好...
@count int,
@size intasselect top (@size) * from message where id not in(select top (@count) id from message order by(id) desc) order by(id) desc
@count int,
@size intas
begin
declare @sql varchar(8000)
set @sql='
select top '+ltrim(@size)+' * from message where id not in(select top '
+ltrim(@count)+' id from message order by(id) desc) order by(id) desc'
exec (@sql)
end
create proc sp_GetTopThing
@count int,
@size int
as declare @sql varchar(8000)set @sql='select top '+ltrim(@size)+' * from message where id not in(select top '+ltrim(@count)+' id from message order by(id) desc) order by(id) desc'exec (@sql)go
@count int,
@size intas
begin
declare @sql varchar(8000)
set @sql='
select
top '+ltrim(@size)+' *
from
message
where
id
not in
(select top '+ltrim(@count)+' id from message order by(id) desc) order by(id) desc'
exec (@sql)
end
http://www.cnblogs.com/downmoon/archive/2007/12/29/1019686.html
@count int,
@size int
as declare @sql varchar(8000)set @sql='select top '+ltrim(@size)+' * from message where id not in(select top '+ltrim(@count)+' id from message order by(id) desc) order by(id) desc'exec (@sql)go
在2000中用这种方法倒是很省事,学了一招,不过要记得set rowcount 0
create proc sp_GetTopThing
@count int,
@size intas
begin
declare @sql varchar(8000)
set @sql='
select top '+ltrim(@size)+' * from message where id not in(select top '
+ltrim(@count)+' id from message order by(id) desc) order by(id) desc'
exec (@sql)
end
2000不支持TOP带变量吧
@count int,
@size int as select top (@size) * from message where id not in(select top (@count) id from message order by(id) desc) order by(id) desc 加上括号就可以了了
(
@count int,
@size int
)
as
begin
declare @sql varchar(8000)
set @sql='select top '+cast(@size as varchar(20))+' * from message '
set @sql=' where [id] not in (select top '+cast(@count as varchar(20))+' [id] from message order by([id]) desc) order by(id) desc'
exec(@sql)
end
@count int,
@size int as
declare @sql varchar(200)@sql='select top '+convert(varchar(20),@size)+' * from message where id not in(select top '+convert(varchar(20),@count)+' id from message order by(id) desc) order by(id) desc '
exec(@sql)
/*---------------------------------------
瘦狼阿亮 | 钱不是问题,问题是没钱!我乐于享受学习的过程
---------------------------------------*/DECLARE @SQL varchar(8000)--测试环境中声明一下@size和@count变量
DECLARE @size int
DECLARE @count int--设置参数变量值
SET @size=6
SET @count=10--用连接字符串的方式生成SQL语句,并将SQL语句放置到@SQL变量中
SET @SQL='select top '+CAST(@size AS varchar(10))+' * from message where id not in(select top '
+CAST(@count AS varchar(10))+' id from message order by(id) desc) order by(id) desc'--为保证语句能够正常运行,首先先打印出生成的SQL语句,用于验证是否符合要求
PRINT (@SQL)/*执行结果:
以下是生成的语句
select top 6 * from message where id not in(select top 10 id from message order by(id) desc) order by(id) desc
*/--执行生成的SQL语句(如果经过检查SQL语句没有问题,就可以把上面的print (@sql)注释掉,直接执行查询即可)
--EXEC (@SQL)
CREATE PROC sp_GetTopThing
@count INT,@size INT
AS
BEGION
DECLARE @SQL varchar(8000) SET @SQL='select top '+CAST(@size AS varchar(10))+' * from message where id not in(select top '
+CAST(@count AS varchar(10))+' id from message order by(id) desc) order by(id) desc' EXEC (@SQL)
END
DECLARE @count int
DECLARE @TEST VARCHAR(100)SET @size=6
SET @count=10
SET @TEST='TEST'SET @SQL='select top '+CAST(@size AS varchar(10))+' * from message where id not in(select top '
+CAST(@count AS varchar(10))+' id from message WHERE NAME='''+@TEST+''' order by(id) desc) order by(id) desc'PRINT @SQL/*执行结果:
select top 6 * from message where id not in(select top 10 id from message WHERE NAME='TEST' order by(id) desc) order by(id) desc注意这里,语句中是这样写的:WHERE NAME='''+@TEST+'''
而执行的结果是:WHERE NAME='TEST'在 'WHERE …………'字符串中要显示一个 '
必须写成 '',如果只有一个',结果就是错误的*/至于这个语句中所使用到的PRINT和EXEC,楼主可以看看联机丛书,里面有详细的描述*********************************
PRINT
将用户定义的消息返回客户端。语法
PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expr参数
'any ASCII text'一个文本字符串。@local_variable任意有效的字符数据类型变量。@local_variable 必须是 char 或 varchar,或者能够隐式转换为这些数据类型。@@FUNCTION是返回字符串结果的函数。@@FUNCTION 必须是 char 或 varchar,或者能够隐式转换为这些数据类型。string_expr是返回字符串的表达式。可包含串联的字面值和变量。消息字符串最长可达 8,000 个字符,超过 8,000 个的任何字符均被截断。注释
若要打印用户定义的错误信息(该消息中包含可由 @@ERROR 返回的错误号),请使用 RAISERROR 而不要使用 PRINT。示例
A. 有条件地执行打印 (IF EXISTS)
本示例使用 PRINT 语句有条件地返回消息。IF EXISTS (SELECT zip FROM authors WHERE zip = '94705')
PRINT 'Berkeley author'B. 生成并显示字符串
本示例将 GETDATE 函数的结果转换为 varchar 数据类型,并将其与 PRINT 要返回的文本进行串联。PRINT 'This message was printed on ' +
RTRIM(CONVERT(varchar(30), GETDATE())) + '.'*********************************EXECUTE
执行标量值的用户定义函数、系统过程、用户定义存储过程或扩展存储过程。同时支持 Transact-SQL 批处理内的字符串的执行 若要唤醒调用函数,请使用 EXECUTE stored_procedure 中描述的语法。语法
执行存储过程:[ [ EXEC [ UTE ] ]
{
[ @return_status = ]
{ procedure_name [ ;number ] | @procedure_name_var
}
[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]
[ ,...n ]
[ WITH RECOMPILE ] 执行字符串:EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )参数
@return_status是一个可选的整型变量,保存存储过程的返回状态。这个变量在用于 EXECUTE 语句前,必须在批处理、存储过程或函数中声明过。*********************************