asp.net 参数化了一条Sql语句。在profiler中监控到跟踪到下面的结果,运行之后出错exec sp_executesql N'select top @limit * from employee where Id not in( select top @start Id from employee )',
N'@limit int,@start int',
@limit=10,@start=0消息 102,级别 15,状态 1,第 1 行
'@limit' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'@start' 附近有语法错误。
sql = "select top @limit * from MaxNews where Id not in( select top @start Id from MaxNews )";
SqlParameter[] parameters = { new SqlParameter("@limit", SqlDbType.Int, 0), new SqlParameter("@start", SqlDbType.Int, 0) };
parameters[0].Value = limit;
parameters[1].Value = start;
N'@limit int,@start int',
@limit=10,@start=0消息 102,级别 15,状态 1,第 1 行
'@limit' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'@start' 附近有语法错误。
sql = "select top @limit * from MaxNews where Id not in( select top @start Id from MaxNews )";
SqlParameter[] parameters = { new SqlParameter("@limit", SqlDbType.Int, 0), new SqlParameter("@start", SqlDbType.Int, 0) };
parameters[0].Value = limit;
parameters[1].Value = start;
这句有错误的
top不能用参数
在SQL2005里面可以了
你可以利用rowcount
SQL SERVER不支持limit你可以使用top 或者 rownumber()来实现类似的功能
exec sp_executesql N'select top @limit * from employee where Id not in( select top
@start Id from employee )',
N'@limit int,@start int',
@limit=10,@start=0
修改为:
--top @limit 修改 top (@limit)
exec sp_executesql N'select top (@limit) * from employee where Id not in( select top @start Id from employee )',
N'@limit int,@start int',
@limit=10,@start=0
就 必须 top 对参数 加 ()
列:
select top 10 * from LESP_ZFJC_XXTB
=======================================================
declare @int int
set @int = 10
select top (@int) * from LESP_ZFJC_XXTB