我想插入如下记录
ID VendorName RequestNo VendorCode ChequeDateSearch Description StoreID
-------------------------------------------------------------------------------------
1 John 1011 1021 2017-10-25 00:00:00.000 descr 6000
2 michael 1011 1022 2017-10-25 00:00:00.000 descr 6000
3 Abraham 1011 1023 2017-10-25 00:00:00.000 descr 6000
注意
对于相同的
,它不应接受重复的VendorCode
RequestNo
在我的表ID
中,RequestNo
和VendorCode
应该是主键。 ID
是自动增量,RequestNo
和VendorCode
是用户指定
CREATE TABLE [dbo].[CheqVendorSearch](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[VendorName] [nvarchar](max) NULL,
[RequestNo] [varchar](50) Not NULL,
[VendorCode] [varchar](50) NOT NULL,
[ChequeDateSearch] [datetime] NULL,
[Description] [nvarchar](max) NULL,
[StoreID] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC,
[RequestNo] ASC,
[VendorCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
但是此表接受RequestNo
和VendorCode
的副本,如下所示
ID VendorName RequestNo VendorCode ChequeDateSearch Description StoreID
-------------------------------------------------------------------------------------
1 John 1011 1023 2017-10-25 00:00:00.000 descr 6000
2 michael 1011 1023 2017-10-25 00:00:00.000 descr 6000
3 Abraham 1011 1023 2017-10-25 00:00:00.000 descr 6000
答案 0 :(得分:0)
您使用ID,RequestNo和VendorCode定义PK - 因此您提到的示例不会被视为重复。但是,从PK中删除ID,它应该可以正常工作。由于ID是由身份填充的,因此这应该没问题。如果由于某种原因你必须通过identity_insert插入数据,我建议只在ypur表中添加一个唯一的密钥,仅覆盖列ID。
答案 1 :(得分:0)
我相信您只需要在表定义中使用UNIQUE
约束。
CREATE TABLE [dbo].[CheqVendorSearch](
[ID] [bigint] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[VendorName] [nvarchar](max) NULL,
[RequestNo] [varchar](50) Not NULL,
[VendorCode] [varchar](50) NOT NULL,
[ChequeDateSearch] [datetime] NULL,
[Description] [nvarchar](max) NULL,
[StoreID] [varchar](10) NULL,
CONSTRAINT UQ_vendor_request UNIQUE
(
[RequestNo] ,
[VendorCode] ASC
)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
您的解决方案中的主要问题是每一行都由ID
唯一标识,因此,将RequestNo
和VendorCode
作为主键的一部分是没用的。
答案 2 :(得分:0)
您正在尝试制作复合主键。 Composite主键强制使Prime属性(ID,RequestNo和VendorCode)的组合是唯一的。要使RequestNo和VendorCode也是唯一的,你必须在它们上面添加Unique Clause。
CREATE TABLE [dbo].[CheqVendorSearch](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[VendorName] [nvarchar](max) NULL UNIQUE,
[RequestNo] [varchar](50) Not NULL UNIQUE,
[VendorCode] [varchar](50) NOT NULL,
[ChequeDateSearch] [datetime] NULL,
[Description] [nvarchar](max) NULL,
[StoreID] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC,
[RequestNo] ASC,
[VendorCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
答案 3 :(得分:0)
复合键为3列的组合应用唯一值,而不是每列(1,John,1011)都是唯一的(2,Michael,1011)。如果您希望它也是唯一的,您需要在RequestNo列上添加唯一键。另外,将varchar数据类型作为PK并不总是一个好主意,并且RequestNo不能是int吗?