社区
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语句来完成这样一个功能?
...全文
132
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写文章
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),...)
PHP求最
高分
,sql查询最
高分
、最低分和平均分语句
sql 查询最
高分
、最低分和平均分语句//我们要用就以学生成绩为实例吧/*结构学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号*/查询各科成绩最
高分
、最低分和平均分:以如下形式显示:课程ID,...
sql查询每科成绩的最
高分
_编写
SQL语句
查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数...
这个问题是在csdn上一位朋友写的,但是答案有点复杂,而且查询使用的效率也不是很好,于是自己也写了
一个
。以下是表结构和数据,有以下两张表,Class表classid classname1 高三(一)班2 高三(二)班3 高三(三)班Student表studentid studentName classid1 张三 22 李四 13 ...
mysql平均分sql_sql 查询最
高分
、最低分和平均分语句
sql 查询最
高分
、最低分和平均分语句//我们要用就以学生成绩为实例吧/*结构学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号*/查询各科成绩最
高分
、最低分和平均分:以如下形式显示:课程ID,...
mysql查找最
高分
最低分_sql查询最
高分
、最低分和平均分语句
sql 查询最
高分
、最低分和平均分语句//我们要用就以学生成绩为实例吧/*结构学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号*/查询各科成绩最
高分
、最低分和平均分:以如下形式显示:课程ID,...
server sql 时间差分钟_
高分
!
SQL语句
,动态求时间差
SQL codeIF OBJECT_ID('tempdb..#FF') IS NOT NULLDROP TABLE #FFGOCREATE TABLE #FF (Number INT,Date_Time DATETIME)INSERT #FFSELECT 1,'2012-1-7 02:05:57' UNION ALLSELECT 2,'2012-1-7 03:38:52' UNION ALLSEL...
MS-SQL Server
34,875
社区成员
254,639
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章