首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

[贴] 关于一条SQL添加到两个不同的表

2012-03-24 
[求助贴] 关于一条SQL添加到两个不同的表表结构.table1StuId,BodyID,Gender,Name,...10多个字段table2StuI

[求助贴] 关于一条SQL添加到两个不同的表

表结构.

table1
StuId,BodyID,Gender,Name,...10多个字段
table2
StuId,Pwd,Name 3个字段


我现在想用一条SQL,同时把一条数据添加到这两个数据表中.

只有两个要求.

1、table2 的 StuID=table1.StuId(同时添加的)
2、Name 的 Name = table1.Name(也是同时添加)

我写的 SQL:

SQL code
declare @Name nvarchar(50) ='aclie',            @Birthday nvarchar(50) ='2011-1-1',            @StaData nvarchar(50) = '2011-1-1',            @Gender nvarchar(50) ='男',            @Nation nvarchar(50)='维吾尔族',            @BodyID nvarchar(50)='123456789123456789'insert into Stu_info (Name,Birthday,StaData,Gender,Nation,BodyID) values (@Name,@Birthday,@StaData,@Gender,@BodyID) ;insert into StuAcct (SName,SPwd,StuId) select StuID,Name,RIGHT(BodyID,6)  StuAcct from Stu_info where BodyID=@BodyID


我想用 select into 同时去添加,但是最后发现还是不行.

我知道这个语句肯定是有错的,求大牛给点思路.

[解决办法]

[解决办法]
用output
[解决办法]
SQL code
触发器
[解决办法]
这个可以做个判断
如果条件符合同时添加
[解决办法]
declare @Name nvarchar(50)
 declare @Birthday nvarchar(50)
 declare @StaData nvarchar(50) 
declare @Gender nvarchar(50) 
declare @Nation nvarchar(50
declare @BodyID nvarchar(50
set @Name ='aclie'
set @Birthday ='2011-1-1'
set @StaData = '2011-1-1'
set @Gender ='男'
set @Nation ='维吾尔族'
set @BodyID ='123456789123456789'


insert into Stu_info (Name,Birthday,StaData,Gender,Nation,BodyID) values (@Name,@Birthday,@StaData,@Gender,@Nation,@BodyID) ;
insert into StuAcct (SName,SPwd,StuId) select StuID,Name,RIGHT(BodyID,6) from Stu_info where BodyID=@BodyID
 
 
[解决办法]
呼叫水哥
[解决办法]
是不是写个事务处理,tabel1 insert成功了然后提取第一个的信息添加进tabel2
[解决办法]
探讨
用output

[解决办法]
CREATE TRIGGER [dbo].[test_INSERT] ON [dbo].[table1]
FOR INSERT
AS
BEGIN

declare @StuID as nvarchar(50)
declare @Name as nvarchar(50)

set @StuID = (select StuID from inserted )
set @Name = (select Name from inserted)

Insert into table2(StuID, Name ) Values(@StuID,@Name)

END


GO
[解决办法]
SQL code
create table tb1 (    id    int identity(1,1),    name    varchar(10))create table tb2(    id    int ,    name    varchar(10))declare @name nvarchar(10);set @name = 'aaa';insert into tb1 values(@name)insert into tb2 select * from tb1 where name = @nameselect * from tb1 select * from tb2/*id,name1,aaa(1 行受影响)id,name1,aaa(1 行受影响)
[解决办法]
再加一个条件
SQL code
insert into tb2 select * from tb1 where name = @name and id = @@identity
------解决方案--------------------


table2 的spwd 和table1 有啥关系 没整明白
如果有关系用触发器还是很简单的
没有关系就用 存储+事务 吧
[解决办法]
触发器? 没必要把 来个批量的就可以了吧!!!
[解决办法]
首先有个问题需要搞明白:
根据楼主给出的代码,可以推断出table1的StuId字段是自增的,那么table2的StuId字段是不是自增呢?如果也是的话,很难保证两边都一致了。
如果table2的StuId字段不是自增,仅仅是用来关联table1和table2的,或者是外关键字,那么可以这样:

SQL code
SET XACT_ABORT ONBEGIN TRANSACTIONdeclare @Name nvarchar(50) ='aclie',        @Birthday nvarchar(50) ='2011-1-1',        @StaData nvarchar(50) = '2011-1-1',        @Gender nvarchar(50) ='男',        @Nation nvarchar(50)='维吾尔族',        @BodyID nvarchar(50)='123456789123456789',        @StuID int insert into Stu_info (Name,Birthday,StaData,Gender,Nation,BodyID) values (@Name,@Birthday,@StaData,@Gender,@Nation,@BodyID)SET @StuID=SCOPE_IDENTITY()insert into StuAcct (SName,SPwd,StuId) VALUES (@Name,RIGHT(BodyID,6),@StuID)COMMIT TRANSACTION 

热点排行