高分请教一个SQL语句

Heray 2003-02-17 11:38:23
有两个表A,B
表A字段有A1,A2,K, 其中K是关键字,自动增加整型,表B有若干个字段,其中有外键K与表A关联。
已知a1,a2,现在要在表A中插入一条记录,使A1=a1,A2=a2,并要求在插入的同时在表B中插入相应的记录,使得B.K=A.K(表B的其它字段使用默认值)
请问如何写SQL语句来完成这样一个功能?
...全文
87 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Heray 2003-02-17
  • 打赏
  • 举报
回复
我知道可以使用触发器,但我想知道如何写SQL语句来实现这样的功能?
BlackPoint 2003-02-17
  • 打赏
  • 举报
回复
使用触发器。
Heray 2003-02-17
  • 打赏
  • 举报
回复
哦,错了,补充一下,表A中还有个时间型字段InsertTime,为插入记录时的时间
cdshelf 2003-02-17
  • 打赏
  • 举报
回复
也可以用 SCOPE_IDENTITY 代替 @K
cdshelf 2003-02-17
  • 打赏
  • 举报
回复
抱歉,我搞错了,应该是:

触发器
CREATE TRIGGER tgInsertA ON dbo.A
FOR INSERT
AS

DECLARE @K INT
SET @K=(Select K From Inserted)
Insert Into B (K,...) Values (@K,...)

注意, @@IDENTITY 并不一定返回准确的值,如果A表还有另外的触发器,并且另外的触发器也涉及到 IDENTITY 生成的话。

Select K From Inserted 可以保证返回的就是刚刚生成的 IDENTITY
pengdali 2003-02-17
  • 打赏
  • 举报
回复
declare @max int
begin tran
select @max=isnull(max(k),0)+1 from 表A
insert 表A values (@max,A1,A2,getDate())
insert 表B (K,其他字段) values(@max,其他字段的值)
commit tran
Heray 2003-02-17
  • 打赏
  • 举报
回复
嗯,谢谢楼上
不过我想知道为什么使用上面所说的触发器会出错
愉快的登山者 2003-02-17
  • 打赏
  • 举报
回复
一条语句不可能完成插入两个表的工作。
两条插入语句放到一个事务中来执行,可以避免数据冲突的发生。
Heray 2003-02-17
  • 打赏
  • 举报
回复
cdshelf兄似乎也不大对,我按你的办法回出错,提示
Subqueries are not allowed in this context.Only scalar expressions are allowed
edarw 2003-02-17
  • 打赏
  • 举报
回复
@@identity是当前会话最后插入identity列的值,也就是插入A表中的K。
Heray 2003-02-17
  • 打赏
  • 举报
回复
但我希望用一条Select语句完成,否则的话有可能出现在执行两个语句之间,有其它客户端改变数据库记录的情况,虽然这是小概率事件,但也应该去避免
Heray 2003-02-17
  • 打赏
  • 举报
回复
不好意思,是我理解错了,谢谢pengdali
Heray 2003-02-17
  • 打赏
  • 举报
回复
楼上的似乎不对吧?
表B中的K不是自动增长型的字段
pengdali 2003-02-17
  • 打赏
  • 举报
回复
begin tran
insert 表A (A1,A2,你的时间字段) values(@a1,@a2,getDate())
insert 表B (K,其他字段) values(@@IDENTITY,其他字段的值)
commit tran
pengdali 2003-02-17
  • 打赏
  • 举报
回复
begin tran
insert 表A (A1,A2) values(@a1,@a2,getDate())
insert 表B (K,.....) values(@@IDENTITY,其他字段)
commit tran
cdshelf 2003-02-17
  • 打赏
  • 举报
回复
Insert Into A (A1,A2) values (a1,a2)

触发器
CREATE TRIGGER tgInsertA ON dbo.A
FOR INSERT
AS
Insert Into B (K,...) Values ((select K from inserted),...)

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧