[英]how to update a primary key that is also a foreign key in another table with petapoco?
[英]How to add a primary (Surrogate) key from one table into a foreign key of another table?
我正在尝试将客户表中的 CustId(主键)添加到 CustomerAddress 表中的 CustID(外键)中。 但我无法自动添加外键。 我该怎么办。 下面是我的架构(我从我的 SQL Server 实例中复制了它)
CREATE TABLE [dbo].[Customers]
(
[CustId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (50) NOT NULL,
[MiddleName] NVARCHAR (50) NULL,
[LastName] NVARCHAR (50) NOT NULL,
[Salutation] NVARCHAR (10) NULL,
[Position] NVARCHAR (50) NULL,
[OrganizationType] NVARCHAR (50) NULL,
[PhoneNumber] NVARCHAR (50) NOT NULL,
[Ext] NCHAR (10) NULL,
[FaxNumber] NVARCHAR (50) NULL,
[CellNumber] NVARCHAR (50) NULL,
[EmailAddress] NVARCHAR (50) NOT NULL,
[EmailPermission] NCHAR (10) NOT NULL,
[Password] NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([CustId] ASC)
);
CREATE TABLE [dbo].[CustomerAddress]
(
[AddressID] INT NOT NULL IDENTITY (1, 1),
[CustID] INT,
[OrganizationName] NVARCHAR (50) NOT NULL,
[Division] NVARCHAR (50) NULL,
[Department] NVARCHAR (50) NOT NULL,
[BuildingRoom] NVARCHAR (50) NULL,
[Street] NVARCHAR (50) NULL,
[City] NVARCHAR (50) NULL,
[POBox] NVARCHAR (50) NULL,
[Province] NVARCHAR (50) NULL,
[PostalCode] NCHAR (10) NOT NULL,
[Country] NVARCHAR (30) NOT NULL,
[AddressType] CHAR (10) NOT NULL,
PRIMARY KEY CLUSTERED ([AddressID]),
CONSTRAINT [FK_CustID] FOREIGN KEY ([CustID]) REFERENCES [dbo].[Customers] ([CustId])
);
插入数据的C#代码:
public int AddCustomerDeliveryAddress(CustomerAddressBLL NewCustomerDeliveryAddressBLL)
{
string sql = string.Format(@"Insert into CustomerAddress (OrganizationName,Division,Department,BuildingRoom,Street,City,POBox,Province,PostalCode,Country,AddressType)
Values(@OrganizationName,@Division,@Department,@BuildingRoom,@Street,@City,@POBox,@Province,@PostalCode,@Country,@AddressType)");
db.AddParameter("@OrganizationName", NewCustomerDeliveryAddressBLL.Organization);
db.AddParameter("@Division", NewCustomerDeliveryAddressBLL.Division);
db.AddParameter("@Department", NewCustomerDeliveryAddressBLL.Department);
db.AddParameter("@BuildingRoom", NewCustomerDeliveryAddressBLL.BuildingRoom);
db.AddParameter("@Street", NewCustomerDeliveryAddressBLL.Street);
db.AddParameter("@City", NewCustomerDeliveryAddressBLL.City);
db.AddParameter("@POBox", NewCustomerDeliveryAddressBLL.PoBox);
db.AddParameter("@Province", NewCustomerDeliveryAddressBLL.Province);
db.AddParameter("@PostalCode", NewCustomerDeliveryAddressBLL.PostalCode);
db.AddParameter("@Country", NewCustomerDeliveryAddressBLL.Country);
db.AddParameter("@AddressType", NewCustomerDeliveryAddressBLL.AddressType);
return db.ExecuteNonQuery(sql);
}
如果您在“纯”T-SQL 中执行此操作,则需要使用如下代码:
-- declare variable for your identity
DECLARE @NewCustId INT;
-- insert into your Customers table
INSERT INTO dbo.Customers([FirstName], [MiddleName], [LastName], ......)
VALUES ('John', 'Robert', 'Doe', ........);
-- get the newly inserted Identity value
SET @NewCustId = SCOPE_IDENTITY();
-- insert into CustomerAddress table
INSERT INTO dbo.CustomerAddress ([CustID], [OrganizationName], [Division], ......)
VALUES(@NewCustId, 'Orgname', 'Division', .....)
更新:好的,它是 C# 代码 - 您需要将其更改为在末尾包含SELECT SCOPE_IDENTITY()
:
string sql = string.Format(@"INSERT INTO dbo.CustomerAddress (OrganizationName, Division, Department, BuildingRoom, Street, City, POBox, Province, PostalCode, Country, AddressType)
VALUES (@OrganizationName, @Division, @Department, @BuildingRoom, @Street, @City, @POBox, @Province, @PostalCode, @Country, @AddressType);
SELECT SCOPE_IDENTITY();");
并使用此调用:
int newCustId = (int)db.ExecuteScalar(sql);
所以你现在从你的INSERT
调用中取回NewCustID
- 现在在你需要将数据插入CustomerAddress
的第二个插入中使用该值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.