【发布时间】:2014-04-19 17:04:56
【问题描述】:
我有 sproc 将执行插入 2 个表,第一个表主键将插入地址表(将与其他 5 个表共享)作为地址 id,当我尝试提取联系信息时将参考特定的司机,学生..等。 正如人们可能会说的 Scope_Identity,如果我只有 2 个表,这很好,但是当我尝试插入表学生或驱动程序的地址 scope_Scope_Identity 时,我可能会遇到重复或主键违规。 任何想法如何去做才能将驱动程序,学生..等主键插入地址表 建议该键将从窗口形式的文本框中插入,或者任何人都可以建议如何去做此操作以及如何改进存储过程
下面是我的存储过程,因为没有设置标识列,所以会失败
USE [GlobalReachCare]
GO
/****** Object: StoredProcedure [dbo].[main_Escort_Insert] Script Date: 19/04/2014 09:07:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[main_Escort_Insert]
-- Add the parameters for the stored procedure here
@EscortID int,
@FirstName varchar(50),
@Surname varchar(50),
@CrbCheck bit = 0,
@CrbRef varchar(25) = false,
@ExpiryDate date = null,
@Training bit = false,
@TrainingType bit = false,
--@AddressID int,
@Address1 varchar(20),
@Address2 varchar(20)= null,
@Address3 varchar(20) = null,
@City varchar(16),
@PostCode varchar(16),
@Email varchar(50) = null,
@Telephone nvarchar(20),
@DateOfBirth date= null,
@NationalIN nvarchar(25)
AS
BEGIN
DECLARE @Escort int
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
Insert Into dbo.tb_EscortsDetails( EscortId,FirstName,Surname, [CRB_Check], [CRB_Ref],ExpiryDate, Training, TrainingType)
VALUES(@EscortId,@FirstName,@Surname,@CrbCheck,@CrbRef,@ExpiryDate,@Training,@TrainingType)
set @Escort = SCOPE_IDENTITY()
insert into tb_Addresses(AddressID,Address1,address2,Address3,City,PostCode,Email,Telephone,DateOfBirth
,NationalINO)
Values(@Escort,@Address1,@Address2,@Address3,@City,@PostCode,@Email,@Telephone,@DateOfBirth,@NationalIN)
END
【问题讨论】:
-
tb_Addresses 中是否使用了主键?
-
真的很难理解你在问什么,你能在表格和预期结果中显示示例数据吗?
标签: sql-server tsql stored-procedures