Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用ID将存储的进程插入到3个表中_Sql_Sql Server - Fatal编程技术网

Sql 使用ID将存储的进程插入到3个表中

Sql 使用ID将存储的进程插入到3个表中,sql,sql-server,Sql,Sql Server,我有一个表单,必须插入到3个表中。我创建了一个存储过程(这是不正确的) 3个表格: 1.dbo.Client(ClientID、ClientName、AddressID) 2.dbo.Contact(AddressID、Addressline1、Add2、CityID)CityID来自Dropdownlist。 3.dbo.pointofcontact(POCID,FirstName,…) 我的存储过程 Create PROCEDURE sp_Clientdetails( @Client

我有一个表单,必须插入到3个表中。我创建了一个存储过程(这是不正确的)

3个表格:
1.dbo.Client(ClientID、ClientName、AddressID)
2.dbo.Contact(AddressID、Addressline1、Add2、CityID)CityID来自Dropdownlist。
3.dbo.pointofcontact(POCID,FirstName,…)

我的存储过程

Create PROCEDURE sp_Clientdetails(
    @ClientName varchar(50),

    @Addressline1   varchar(50),
    @Addressline2   varchar(50),
    @CityID INT,

    @Firstname  varchar(50),
    @LastName   varchar(50),
    @Middlename  varchar(50),
    @Mob1 numeric(10,0),
    @Mob2 numeric(10,0),
    @Email1 varchar(50),
    @Email2 varchar(50),
    @phone varchar(50),
    @Extention INT  
    )
AS
DECLARE @AddressID int, @ClientID int, @POCID int;

Set NOCOUNT OFF

BEGIN TRANSACTION

IF NOT EXISTS(Select 1 FROM dbo.Contact Where AddressID=@AddressID)
BEGIN
    INSERT INTO dbo.Contact VALUES (@Addressline1, @Addressline2, @CityID);
    SET @AddressID = SCOPE_IDENTITY();
    SET @CityID = SCOPE_IDENTITY();
END
ELSE
    Select AddressID = @AddressID From dbo.Contact Where AddressID=@AddressID;

IF NOT EXISTS(Select 1 FROM dbo.Client Where ClientID=@ClientID)
BEGIN
    INSERT INTO dbo.Client VALUES (@ClientID, @AddressID, @CityID);
    SET @ClientID= SCOPE_IDENTITY();
END
ELSE
    Select ClientID = @ClientID From dbo.Client Where ClientID = @ClientID;

Insert into dbo.PointOfCContact VALUES (@Firstname, @LastName, @Middlename, @Mob1, @Mob2,
 @Email1, @Email2, @phone, @Extention);
SET @POCID= SCOPE_IDENTITY();

COMMIT
获取错误:提供的值的列名或数量与表定义不匹配


中插入dbo.Contact值(@Addressline1、@Addressline2、@CityID)

您应该指定列名

INSERT INTO dbo.Contact (Address1, Adddres2, CityID) 
VALUES (@Addressline1, @Addressline2, @CityID);

....

INSERT INTO dbo.Client (ClientID, AddressID, CityID)
VALUES (@ClientID, @AddressID, @CityID);  

更好的是,您可以使用
MERGE
语法

您必须添加结构表;向表中添加列

INSERT INTO dbo.Contact (Address1, Adddres2, CityID) VALUES (@Addressline1, @Addressline2, @CityID);

插入dbo.Contact(Address1,Adddres2,CityID)值(@Addressline1,@Addressline2,@CityID);设置@AddressID=SCOPE_IDENTITY();在dbo.Client(ClientID,AddressID,CityID)中插入值(@ClientID,@AddressID,@CityID)