sql="select top 0 * from [online]"
rs.open sql,conn,1,3
rs.addnew
rs("数据")="数据"
rs("数据")="数据"
rs.update
session("ID")=rs("id")
rs.close
这样做起来的效率高吗?有没有更好的办法?
16 个解决方案
#1
我的做法跟你的一样啊!
#2
这样是查询第一条记录的ID号~不是最新的吧
#3
最好用SQL语句
set rs=conn.execute("insert into mytable(id,name) values(1,'killy')")
set rs=conn.execute("insert into mytable(id,name) values(1,'killy')")
#4
效率不高,最好用如下方法:
最好用SQL语句
conn.execute("insert into mytable(id,name) values(1,'killy')")
最好用SQL语句
conn.execute("insert into mytable(id,name) values(1,'killy')")
#5
对啊,你那样做只是修改了吧
#6
select @@identity as id
#7
楼主这样作其实不完全正确的!
假如有两个人(甲乙)同时操作,甲在添加数据的时候乙也在作,甲的环境稍微差些,乙先作完了,
这个时候,甲得到的ID值就会是乙的ID值,当然,乙这时候得到的是自己的ID值!
这只是两个人的情况,如果有多个人在同时操作,就乱了!!
aspczlover(执子之手...) 的方法是否可行我还不知道呢!个人感觉应该写个存储过程!
假如有两个人(甲乙)同时操作,甲在添加数据的时候乙也在作,甲的环境稍微差些,乙先作完了,
这个时候,甲得到的ID值就会是乙的ID值,当然,乙这时候得到的是自己的ID值!
这只是两个人的情况,如果有多个人在同时操作,就乱了!!
aspczlover(执子之手...) 的方法是否可行我还不知道呢!个人感觉应该写个存储过程!
#8
调用这个存储过程进行插入,并且返回插入的数据的ID值
#9
效率低一点没关系,可别出错啊?有权威一下吗? 我感觉sunjiujiu(窝头太少了)的情况不出出现吧!就算更新了RS执行了一下UPDATE,rs的指针仍然指向当前新插入的记录的,怎么会跑到别的记录上去呢?
#10
自己顶一下
#11
还行.
#12
自己插入的这条记录直接先写进去rs.update
楼主这类写法好象和这个没有区别
session("id")=rs.recordcount
就是最新的记录吧?
楼主这类写法好象和这个没有区别
session("id")=rs.recordcount
就是最新的记录吧?
#13
效率低一点没关系,别出错就可以了。
#14
to bye9bye
rs.recordcount是总记录数吧,再说了,为什么要写进session,你理解错我的意思了
rs.recordcount是总记录数吧,再说了,为什么要写进session,你理解错我的意思了
#15
用储存过程,这样的话,在储存过程中同时加入事务处理,不论什么情况,只有先执行储存过各的那个得到数据库中最后的ID,且新ID用最大ID加1的方式进行,这样可以保证不会有任何错误出现!
#16
SCOPE_IDENTITY
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
语法
SCOPE_IDENTITY( )
返回类型
sql_variant
注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
语法
SCOPE_IDENTITY( )
返回类型
sql_variant
注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
#1
我的做法跟你的一样啊!
#2
这样是查询第一条记录的ID号~不是最新的吧
#3
最好用SQL语句
set rs=conn.execute("insert into mytable(id,name) values(1,'killy')")
set rs=conn.execute("insert into mytable(id,name) values(1,'killy')")
#4
效率不高,最好用如下方法:
最好用SQL语句
conn.execute("insert into mytable(id,name) values(1,'killy')")
最好用SQL语句
conn.execute("insert into mytable(id,name) values(1,'killy')")
#5
对啊,你那样做只是修改了吧
#6
select @@identity as id
#7
楼主这样作其实不完全正确的!
假如有两个人(甲乙)同时操作,甲在添加数据的时候乙也在作,甲的环境稍微差些,乙先作完了,
这个时候,甲得到的ID值就会是乙的ID值,当然,乙这时候得到的是自己的ID值!
这只是两个人的情况,如果有多个人在同时操作,就乱了!!
aspczlover(执子之手...) 的方法是否可行我还不知道呢!个人感觉应该写个存储过程!
假如有两个人(甲乙)同时操作,甲在添加数据的时候乙也在作,甲的环境稍微差些,乙先作完了,
这个时候,甲得到的ID值就会是乙的ID值,当然,乙这时候得到的是自己的ID值!
这只是两个人的情况,如果有多个人在同时操作,就乱了!!
aspczlover(执子之手...) 的方法是否可行我还不知道呢!个人感觉应该写个存储过程!
#8
调用这个存储过程进行插入,并且返回插入的数据的ID值
#9
效率低一点没关系,可别出错啊?有权威一下吗? 我感觉sunjiujiu(窝头太少了)的情况不出出现吧!就算更新了RS执行了一下UPDATE,rs的指针仍然指向当前新插入的记录的,怎么会跑到别的记录上去呢?
#10
自己顶一下
#11
还行.
#12
自己插入的这条记录直接先写进去rs.update
楼主这类写法好象和这个没有区别
session("id")=rs.recordcount
就是最新的记录吧?
楼主这类写法好象和这个没有区别
session("id")=rs.recordcount
就是最新的记录吧?
#13
效率低一点没关系,别出错就可以了。
#14
to bye9bye
rs.recordcount是总记录数吧,再说了,为什么要写进session,你理解错我的意思了
rs.recordcount是总记录数吧,再说了,为什么要写进session,你理解错我的意思了
#15
用储存过程,这样的话,在储存过程中同时加入事务处理,不论什么情况,只有先执行储存过各的那个得到数据库中最后的ID,且新ID用最大ID加1的方式进行,这样可以保证不会有任何错误出现!
#16
SCOPE_IDENTITY
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
语法
SCOPE_IDENTITY( )
返回类型
sql_variant
注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
语法
SCOPE_IDENTITY( )
返回类型
sql_variant
注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。