在SQL 2005/2008数据库中,我们有表BatchMaster.列:RecordId bigint - autoincremental id,BatchNumber bigint - 唯一的非聚集索引,BatchDate).我们有sproc返回此表中的分页数据.该sproc适用于大多数客户端,但在一个SQL服务器实例中,我们遇到记录顺序问题.一般来说,我们这样做
select * from
(
select row_number() over (order by bm.BatchDate desc, bm.BatchNumber desc) as Row,
*
from dbo.BatchMaster bm with (nolock)
)
where Row between @StartingRow and @EndgingRow
Run Code Online (Sandbox Code Playgroud)
因此,正如您可以从上面的脚本中注意到的那样,我们希望返回按BatchDate和BatchNumber排序的记录.对于我们的一位客户来说,这不会发生:

记录顺序错误.另外,请注意第一列(行),它不是按升序排列的.
有人能解释为什么这样吗?
我正在尝试理解如何尝试...捕获构造在T-SQL中工作.
所以我在MSDN上阅读了文章:http://msdn.microsoft.com/en-us/library/ms175976.aspx
我对这个陈述有点困惑: 一个TRY ... CATCH构造不能跨越多个批次.TRY ... CATCH构造不能跨越多个Transact-SQL语句块.例如,TRY ... CATCH构造不能跨越Transact-SQL语句的两个BEGIN ... END块,并且不能跨越IF ... ELSE构造.
它说try ... catch不能跨越2个BEGIN ... END块,不能跨越IF ... ELSE构造.
但是,我已经尝试过了,它的确有效!(2005年和2008年)
有人可以解释原因吗?在MSDN上看起来有些错误.
看看我的测试脚本:
print 'start'
begin transaction test_tran
begin try
-- first begin ... end
begin
-- some statements
print 'begin ... end - #1'
end
-- second begin ... end
begin
print 'begin ... end - #2'
-- statement with error
select 1/0 -- division by zero
end
print 'end of try'
end …Run Code Online (Sandbox Code Playgroud) 以下是我们在其中一个网站上的问题:
使用Windows文件系统速记字符和状态返回代码强制执行文件/目录名称
It is possible to find an unknown filename up to six characters by using shorthand file characters such as ~1 and
*Example: site.com/admin/uplo*~1*/.aspx
This attack relies on reading different error codes the webserver responds with when the file(s) exist or not. Let’s say the file upload.aspx exists in the directory admin. Our attacks responses would look like this:
site.com/admin/uplo*~1*/.aspx – IIS returns HTTP 404 File Not Found (valid file)
site.com/admin/uplp*~1*/.aspx – IIS returns HTTP 400 Bad Request (invalid …Run Code Online (Sandbox Code Playgroud) sql ×2
sql-server ×2
asp.net ×1
if-statement ×1
iis ×1
row-number ×1
security ×1
sorting ×1
sql-order-by ×1
t-sql ×1
try-catch ×1