求写SQL语句

stevenjin 2018-06-23 04:34:44
需求如下:
1.如果标签在A表中不存在,则将标签直接插入表A和B,这里要将表1产生的ID值做为表B的ID值插入(表B关联了表A的ID)。
这里我想到用IDENT_CURRENT,但不知怎样写整个语句。
2. 如果标签在表A已经存在,但在表B不存在,则将标签插入表B

表A结构
LabelID LabelName
2 BJ20
表B结构
CarName LabelID
北汽BJ20 2
...全文
101 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-06-23
  • 打赏
  • 举报
回复
引用 4 楼 stevenjin 的回复:
我觉得应该改成这样,才能保证并发时不出问题。SELECT @id = IDENT_CURRENT('A')

个人意见:IDENT_CURRENT不受会话控制,出问题的情况可能比SCOPE_IDENTITY更多
stevenjin 2018-06-23
  • 打赏
  • 举报
回复
我觉得应该改成这样,才能保证并发时不出问题。SELECT @id = IDENT_CURRENT('A')
stevenjin 2018-06-23
  • 打赏
  • 举报
回复
群主,如果在高并发的情况下,这里是用SCOPE_IDENTITY还用用IDENT_CURRENT?
二月十六 2018-06-23
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([LabelID] INT IDENTITY,[LabelName] nvarchar(24))
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([CarName] nvarchar(26),[LabelID] int)
Go
--测试数据结束
DECLARE @name NVARCHAR(200)='测试'
DECLARE @id INT
IF(EXISTS(SELECT * FROM #A WHERE LabelName=@name))
BEGIN
INSERT INTO #B
(
CarName,
LabelID
)
VALUES
( N'这里写啥?', -- CarName - nvarchar(26)
(SELECT TOP 1 LabelID FROM #A WHERE LabelName=@name ) -- LabelID - int
)
END
ELSE
BEGIN
INSERT #A
(
LabelName
)
VALUES (@name
)

SELECT @id=SCOPE_IDENTITY()
INSERT INTO #B
(
CarName,
LabelID
)
VALUES
( N'这里写啥?', -- CarName - nvarchar(26)
@id -- LabelID - int
)
END

SELECT * FROM #B


二月十六 2018-06-23
  • 打赏
  • 举报
回复
插入B的时候CarName是什么?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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