严格意义上讲,没有所谓“同时插入”的手段,只有“要么都插入(分先后),要么都不插入”的机制,这个机制就叫做“事务”,是数据库服务器的执行单位,是原子操作。
由上,将两个insert命令包装为一个事务,如下:
declare @OK integer
begin transaction
set @OK = 0
while 1 = 1
begin
insert table1 values( ... )
set @OK = @@error
if @OK <> 0
Break
insert table2 values (... )
set @OK = @@error
Break
end
if @OK = 0
commit transaction
else
rollback transaction
通过触发器也能实现需求,其底层原理依然是事务,触发器和引发它执行的语句被自动地包装到一个事务中。不过,强烈不建议使用该方法,用此伎俩会导致业务逻辑分散,而人的思维还是需要一定的连贯性,集中在一起显然有助于表达和理解,当需要改进或者调试错误时徒增繁琐,实在是弊大于利。
可以啊,建议你用触发器。比如在Table1中:
Create Trigger AutoInsert
For Insert
As
insert into Table2 values(1,2)
然后你只要执行:
insert into Table1 values(1,2)
那么自动启用触发机制,自然Table2中也有了。
insert into 表1.UserName values ('1','2')
insert into 表2.User values ('1','2')insert语句是不能同时操作两个表的,要分为两条