社区
MS-SQL Server
帖子详情
高分请教一个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
打赏
收藏
高分请教一个SQL语句
有两个表A,B 表A字段有A1,A2,K, 其中K是关键字,自动增加整型,表B有若干个字段,其中有外键K与表A关联。 已知a1,a2,现在要在表A中插入一条记录,使A1=a1,A2=a2,并要求在插入的同时在表B中插入相应的记录,使得B.K=A.K(表B的其它字段使用默认值) 请问如何写SQL语句来完成这样一个功能?
复制链接
扫一扫
分享
转发到动态
举报
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),...)
基础类 -
SQL语句
基础类 -
SQL语句
<br />转载请标明出处: http://blog.csdn.net/hz/archive/2006/03/01/613376.asp 本文来自 CSDN 博客。x sql server 怎么跨库查询? 如何判断字符的大小写 ? 如何...
MS-SQL Server 基础类 -
SQL语句
请教
SQL语句
或其它方法:
一个
含TEXT字段的表,我无意间用了两次BCP重复导入数据,之后表中有... 请问怎样编写
SQL语句
:在成绩列输入数据,然后对其进行排序,并把结果存入排名列. sqlserver中如何选取查询结果的中间某...
oracle删除表空间死锁,oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的
Sql语句
,没提交的事务,对象为哪些进程所用...
高分
请教
:怎么查看当前表空间在作什么操作?楼主Liangao(空白)2006-08-10 22:09:46 在 Oracle / 基础和管理 提问如何查看当前时刻在对某个表空间作什么样操作?如何查看某个会话进程在作什么样操作(如:执行过程,...
oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的
Sql语句
,没提交的事务,对象为哪些进程所用
高分
请教
:怎么查看当前表空间在作什么操作?楼主Liangao(空白)2006-08-10 22:09:46 在 Oracle / ; color: #ff3366; font-size: 1em; cursor: pointer; text-decorati
SQL | 窗口函数 row number + partition by 排序
目录 1 背景2 SQL牛逼函数走起来2.1 Step12.2 SQL实现12.3 Step22.4 SQL实现22.5 ...
SQL语句
3 头条面试SQL题3.1&nbs...
MS-SQL Server
34,837
社区成员
254,632
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章