如何在执行另一个SQL语句之前检查sql语句是否一直在执行。
我这样做
DECLARE tempId double default 2;
insert IGNORE into `system_users`( `user_id`,`username`,`password`) values (id , userName ,md5(password)) ;
set tempId= last_insert_id();
IF tempId <> 0 THEN
insert into `user_profile`(`user_id`, `full_name`, `cellphone`, `Date_time_ added`,`added_by`) values (id, fullName ,cellPhone , CURRENT_TIMESTAMP(),addedBy ) ;
函数last_insert_id()不适用于我的情况,因为user_id不是自动增量pk,它是用户的标识号。什么是用于测试sql语句执行的函数。
答案 0 :(得分:2)
也许是这样的。查看插入的行是否已存在:
insert IGNORE into `system_users`( `user_id`,`username`,`password`) values (id , userName ,md5(password)) ;
IF NOT EXISTS(SELECT NULL FROM system_users WHERE system_users=id)
BEGIN
insert into `user_profile`(`user_id`, `full_name`, `cellphone`, `Date_time_ added`,`added_by`) values (id, fullName ,cellPhone , CURRENT_TIMESTAMP(),addedBy ) ;
END
答案 1 :(得分:1)
你没有指定你正在使用的DMBS所以我会假设MySQL(对我来说它看起来像MySQL,请另外说明)对于INSERT
语句,请使用ROW_COUNT()
E.g。
DECLARE tempId double default 2;
insert IGNORE into `system_users`( `user_id`,`username`,`password`) values (id , userName ,md5(password)) ;
set tempId= ROW_COUNT();
这将返回受影响的行数。
另请注意,对于SELECT
语句,您可以使用FOUND_ROWS()
e.g。
SELECT SQL_CALC_FOUND_ROWS * FROM MyTable;
SELECT FOUND_ROWS();
虽然这会告诉您找到的总行数,但不管您是否有LIMIT
子句。
答案 2 :(得分:1)
您可以在存储过程结束之前添加它,它将指示是否有任何记录受到影响。
IF @@ROWCOUNT <>1
BEGIN
RAISERROR ('An error occured',10,1)
RETURN -1
END
例如
DECLARE tempId double default 2;
insert IGNORE into `system_users`( `user_id`,`username`,`password`) values (id , userName ,md5(password)) ;
IF NOT EXISTS(SELECT NULL FROM system_users WHERE system_users=id)
BEGIN
insert into `user_profile`(`user_id`, `full_name`, `cellphone`, `Date_time_ added`,`added_by`) values (id, fullName ,cellPhone , CURRENT_TIMESTAMP(),addedBy ) ;
IF @@ROWCOUNT <>1
BEGIN
RAISERROR ('No rows were affected',10,1)
RETURN -1
END
END
因此,如果没有修改行,RAISERROR变量将包含“没有行受影响”。这是你在寻找什么,还是我误解了......
答案 3 :(得分:0)
您必须测试SQLCODE的值
SQLCA数据结构中最重要和最广泛使用的字段是SQLCODE变量。每次Microsoft®SQLServer™2000运行嵌入式SQL语句时,它都会设置SQLCODE变量的值,以指示上一个嵌入式SQL语句是否成功完成。值为0表示最后一个嵌入式SQL语句成功。 0以外的值表示警告或错误。
来源http://msdn.microsoft.com/en-us/library/aa225200(v=sql.80).aspx
不同的SQLCODE值列表:http://www.caliberdt.com/tips/sqlcode.htm
(我使用了MSSQL Server,但SQLCODE是每个SQL引擎都可用的标准版)