SQL 存储过程中in

存储过程中用in,如果将条件(1,2,3)这样的集合当成参数传进来的话是不能执行的,因为集合转成一个变量是出错

解决办法拼接SQL字符串传进来,后者在存过中拼接字符串都可以如:

ALTER PROCEDURE [dbo].[db_MoveArticleByClassId]
  @SqlString varchar(4000)
AS
BEGIN
  BEGIN TRAN -- 显示定义并开始一个事务
SET XACT_ABORT ON -- 表示遇到错误立即回滚
exec(‘UPDATE db_article ‘[email protected]+‘AND a_id = 23‘)
IF @@error <> 0  --发生错误
BEGIN
   ROLLBACK TRANSACTION
   RETURN 0
END
ELSE
BEGIN
   COMMIT TRANSACTION
   RETURN 1    --执行成功
END

END

时间: 2024-08-29 15:19:23

SQL 存储过程中in的相关文章

在SQL存储过程中给条件变量加上单引号

在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) set @where= '(DATEDIFF(day,'''+CONVERT(varchar(100), @d_start, 23)+''',sdate)>=0 and DATEDIFF(day,'''+CONVERT(varchar(100), @d_end, 23)+''',sdate)<=0) and ' +

SQL存储过程中,传参获取指定条数的记录

假设传入参数 为 @TopCount 直接写 Select top @topcount * from table 是不行的. 可以考虑使用SET ROWCOUNT 示例如下 ALTER PROCEDURE [dbo].[P_CSM_SelectHandleResult] @TopCount int=50 AS BEGIN SET NOCOUNT ON; set rowcount @TopCount SELECT * from HandleResult order by HandleIndex d

SQL 存储过程中QUOTED_IDENTIFIER on/off

http://huihai.iteye.com/blog/1005144 在存储过程中经常会有 Sql代码   SET QUOTED_IDENTIFIER on SET QUOTED_IDENTIFIER off SET QUOTED_IDENTIFIER on SET QUOTED_IDENTIFIER off 这样的语句,那么SET QUOTED_IDENTIFIER到底是什么意思,有什么用呢,今天下午仔细的看了一下. 如果SET QUOTED_IDENTIFIER on时,在创建一个表时,

怎样SQL存储过程中执行动态SQL语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处

sql 存储过程中何时使用declare声明变量

这个问题我从百度第二页才找得到答案,就从别人的答案自己仔细研究懂了,顺便整理了过来.原文链接:https://zhidao.baidu.com/question/245490659799230284.html 如果把存储过程看作是批处理语句就好理解多了 存储过程只不过是一个带着名称的SQL批处理语句,如果在整个过程中需要变量时就是可以声明,但该变量声明后只能存活在批处理(存储过程)的运行中,运行完毕后就会消失,这种声明的格式就是:declare 变量名 类型 其中变量名为了与数据库中的列名相互区

oracle学习-PL SQL 存储过程中循环、触发器

PL SPL 提供了3中不同类型的循环结构 -- 实例:索引 loop_counter从1开始,到10 结束,循环共执行10次 FOR loop_counter IN 1 .. 10 LOOP ...可执行语句... END LOOP; -- 索引loop_counter从10开始,到1结束,循环共执行10次: FOR loop_counter IN REVERSE 1 .. 10 LOOP ...可执行语句... END LOOP; -- 循环的执行范围取决于变量或者表达式的值: FOR ca

SQL存储过程内部RaisError客户端抓不住弹不出错误的解决

我们有个海宏商业erp3,库存部分是用存储过程写的,减库存时会先检查负库存,比如还有5个你想出库6个,存储过程就raisError('库存不足',16,1). 最近这一个版本发布后,有客户反映有时候会出负库存. 再一个,我们软件特殊情况下会同时操作本地和远程两个数据库.开两个sql事务,容易产生莫名其妙的错误. 倒腾了一阵,结果汇总在这里,百度上搜不到答案,希望以后有人遇到能管用. {*****************************************测试目的***********

Sql Server中的存储过程

Transact-SQL中的存储过程,非常类似于c#语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进行了

SQL Server存储过程中使用事务

今天修改之前一个同事写的代码,发现方法中直接执行了两个sql语句,一个是删除用户,一个是删除该用户的权限.由于数据库数据比较多,导致有时候这个两个sql不能都执行成功,数据库出现了脏数据. 鉴于这个原因,我把两个sql放到了一个存储过程中执行,在存储过程中添加事务,使其要么都执行,要么都不执行. 代码框架如下: 1 CREATE PROCEDURE pro_TrancDemo @backvalue INT OUTPUT 2 AS 3 BEGIN 4 SET NOCOUNT ON; 5 6 BEG