TOP后带参数 SQL语句错误 不能用++字符串拼接

由于有限制SQL语句不能用++字符串拼接,top后面的整形参数 a b 我就占位@inta @intb
如下:
首先:
select top @inta row_number from table_news where row_number not in ( select top @intb row_number from table_news order by row_number desc ) order by row_number desc
第 1 行: '@inta' 附近有语法错误。
第 1 行: '@intb' 附近有语法错误。
改进后:
select top (@inta) row_number from table_news where row_number not in ( select top (@intb) row_number from table_news order by row_number desc ) order by row_number desc
第 1 行: '(' 附近有语法错误。
第 1 行: '(' 附近有语法错误。
怎么解???

你这样写不行,这种语句不能与变量这样使用,如果你非要这样用,那么顶一个@Sql变量,然后以字符串的形式拼接Sql文,如果在存储过程里就 Execute sp_executesql @Sql
拼接:
declare @Sql as nvarchar(max)
set @Sql = ‘select top ’ + cast(@inta as nvarchar(10))
set @Sql = @Sql + 'row_number from table_news where row_number........'
Execute sp_executesql @Sql
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-14
你这是在存储过程中么?追问

我这是在调用SQL语句中,调用完,加参数

帮忙解释下边SQL语句中小括号里的@、++、双引号
就是变量的意思 @type 这个整体就是个变量 +是代表字符串拼接 你说的双引号其实是单引号 在sql中 单引号需要''来转义 如 select ''' 只输出一个单引号 字符串需要使用单引号 组合起来

sql插入失败,请高手指教,谢谢。
sql语句错误,其中在拼接sql语句时,有某个参数为空,导致''无法正常闭合。这种拼接方式极易造成sql注入。可以使用参数传递 sql语句这样写就可以了 string sql=@"insert into Complex(序号,位号,字符串) values (@序号,@位号,@字符串)";cmd.CommandText=sql;OleDbParameter[] paras= { new OleDbParam...

关于mysql查询语句的问题
用+号拼接,是为了在加号中间可以放入变量 你说的那种也是可以的 但是在数据库里如果值是字符串或 是日期 要用单引号包围,所以才这样用 如果你用的是preparedstatement会简单很多 按你的问题可以这样写:PreparedStatement ps=conn.prepareStatement("select * from tb_message where filedname = ? and ...

...语句时,执行到ps.executeUpdate(sql); 就报错;貌似这句就不能执 ...
转义字符,把你sql语句里面的 " 改成 \\" 就可以了,单引号改成 \\'如果定义了一个table为:carate table table1(text1 varchar(50));在使用sql语句的时候,就是:String sql="insert into table1(text1) values(\\'here is my input text\\');";当然,也可以把 \\' 换成是 \\"...

C#sql里的where后面参数members是个多值,如何赋值呢?
要拼接SQL语句实现这样功能,如下:string sql = @"select kuai,aini,banji,mingr from neg.dbf where nryid in('";string parms =null;for(int i=0;i<members.length;i++){\/\/循环数组实现参数遍历 if(i != members.length-1){ parms += members[i]+"','";}else{ parms += members...

我用Sqlserver2008查询时生成的Sql语句,都是自动换行的,如何设置可以不...
用EditPlus,选中你要合并行的代码,执行合并行,即可(notepad++这类工具都有这个功能)在sql里面你也可以用sql直接处理,declare @a varchar(max)set @a = 'SELECT TOP 1000 [id] ,[canceltype] ,[pername] ,[peroaid] ,[Itemid] ,[itemtype] ,[itemname] ,[sum] ...

试解释 SQL 注入攻击的原理,以及对数据库可能产生的不利影响。
1.限制错误信息的输出 这个方法不能阻止SQL注入,但是会加大SQL注入的难度,不会让注入者轻易得到一些信息,让他们任意破坏数据库。SQL Server有一些系统变量,如果我们没有限制错误信息的输出,那么注入着可以直接从出错信息获取,例如(假定这里用的string即字符类型并可以发生SQL注入):http:\/\/www.xxx.com\/showdetail.aspx...

mssql 的一张表中有100000条数据,如何用mssql语言将这100000条数据平均...
sql语句中除了表变量,在语句中不可以用变量作为表名 你可以用动态sql执行,即exec(@sql)用变量@sql里面拼接sql语句把@i当做字符串拼接进去

求帮忙一个java的sql语句拼接,条件是 in 包括!
\/\/不知道你usr_id怎么传入,现假设 ids =[101,102]String sql = "select * from usr_info u where u.usr_id in ("StringBuilder sd = new StringBuilder(sql);for(int i=0;i<ids.length();i++){ \/\/实际操作,就是添加 "'101‘," sb.append("'").append(ids[i]).append(...

用c#实现对 SQL数据库的 连接关闭,增删查改
\/\/\/ 存储过程的名字或者 T-SQL 语句 \/\/\/ 以数组形式提供SqlCommand命令中用到的参数列表 \/\/\/ <returns>返回一个数值表示此SqlCommand命令执行后影响的行数<\/returns> public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { ...

相似回答