我正在使用SQL Server 2012中的脚本(作为经典ASP页面的后端)来从我的初始表(aaa_test_ap
)中选择所有行,并将它们分布在我的其他3个表中({{1} },aaa_test_users
和aaa_test_users_positions
)。
我希望获得aaa_test_users_education
的标识,一旦插入一行,就可以在同一个查询中用作其他两个表插入,作为它们的FK(aaa_test_users.ID
) 。
是否可以在一个查询中使用User_ID
方法获取身份?
我已尝试使用INSERT INTO
,但它只返回最后一个值。
使用SCOPE_Identity()
方法,我如何利用它生成的表值,以便第一个insert语句生成的值插入到接下来的两个语句中,每个语句都在正确的插入行中?
首先,表格:
OUTPUT
这是我一直在研究的问题:
CREATE TABLE [dbo].[aaa_test_sp]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) NULL,
[first_name] [nvarchar](50) NULL,
[last_name] [nvarchar](50) NULL,
[position] [nvarchar](50) NULL,
[phone] [nvarchar](50) NULL,
[education] [nvarchar](50) NULL,
[ListID] [int] NULL,
CONSTRAINT [PK_aaa_test_sp]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[aaa_test_users]
(
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) NULL,
[first_name] [nvarchar](50) NULL,
[last_name] [nvarchar](50) NULL,
CONSTRAINT [PK_aaa_test_users]
PRIMARY KEY CLUSTERED ([UserID] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[aaa_test_users_positions]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NULL,
[position] [nvarchar](50) NULL,
[phone] [nvarchar](50) NULL,
CONSTRAINT [PK_aaa_test_users_positions]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[aaa_test_users_education]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NULL,
[education] [nvarchar](50) NULL,
CONSTRAINT [PK_aaa_test_users_education]
PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]
GO
答案 0 :(得分:0)
您加入新ID的表格。
作为第二个插入的示例:
INSERT INTO aaa_test_users_positions(UserID, position, phone)
SELECT io.UserID, position, phone
FROM aaa_test_sp cross join
@InsertOutput1 io
WHERE ListId = '1';
注意:根据您的结构,@InsertOutput1
中可能只有一行,因此这不会产生比预期更多的行。