gpt4 book ai didi

sql - 仅在一台服务器上更改作为主键一方的字段时出错

转载 作者:行者123 更新时间:2023-12-01 14:38:31 25 4
gpt4 key购买 nike

我有两台MSSQL Server,一台是SQL Server 2016,一台是SQL Server 2017。

在 SQL Server 2016 上,当我运行这段代码时:

ALTER TABLE [FSFIELDLABEL] ALTER COLUMN [VALIDATION_CODE] NVARCHAR(30) NOT NULL;

然后我得到预期的错误:

Msg 5074, Level 16, State 1, Line 3
The object 'FS_FIELDLABEL_PK' is dependent on column 'VALIDATION_CODE'.
Msg 4922, Level 16, State 9, Line 3
ALTER TABLE ALTER COLUMN VALIDATION_CODE failed because one or more objects access this column.

但是,当我在 SQL Server 2017 上运行相同的命令时,我没有收到错误。我已经检查过,两个数据库上都存在相同的主键,一个在 2016 年的服务器上,一个在 2017 年的服务器上。

我可以查看哪些用户权限或数据库设置来尝试确定这两个服务器行为不同的原因? 2017 服务器是我们的开发人员测试的对象,因此当他们测试在 2017 服务器上“有效”但在 2016 服务器上失败的代码时,我们真的搞砸了。

2017年“无错误”表的SQL创建

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[FSFIELDLABEL](
[LANGUAGE_CODE] [nvarchar](20) NOT NULL,
[VALIDATION_CODE] [nvarchar](30) NOT NULL,
[DATA_NAME] [nvarchar](32) NOT NULL,
[RECFMT_CODE] [nvarchar](4) NOT NULL,
[LINE_ID] [smallint] NOT NULL,
[LABEL] [nvarchar](500) NULL,
[FORMAT_CODE] [nvarchar](20) NULL,
[VERSION] [nvarchar](10) NULL,
[FS_SYS_ROWID] [int] NULL,
[TOOLTIP] [nvarchar](512) NULL,
[DISPLAY_TOOLTIP] [smallint] NOT NULL,
CONSTRAINT [FS_FIELDLABEL_PK] PRIMARY KEY CLUSTERED
(
[LANGUAGE_CODE] ASC,
[VALIDATION_CODE] ASC,
[DATA_NAME] ASC,
[RECFMT_CODE] ASC,
[LINE_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[FSFIELDLABEL] ADD DEFAULT ('A') FOR [RECFMT_CODE]
GO
ALTER TABLE [dbo].[FSFIELDLABEL] ADD DEFAULT ((0)) FOR [LINE_ID]
GO
ALTER TABLE [dbo].[FSFIELDLABEL] ADD DEFAULT (' ') FOR [LABEL]
GO
ALTER TABLE [dbo].[FSFIELDLABEL] ADD DEFAULT ((1)) FOR [DISPLAY_TOOLTIP]
GO

为 2016 年“非工作”服务器创建的 SQL

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[FSFIELDLABEL](
[LANGUAGE_CODE] [nvarchar](20) NOT NULL,
[VALIDATION_CODE] [nvarchar](20) NOT NULL,
[DATA_NAME] [nvarchar](32) NOT NULL,
[RECFMT_CODE] [nvarchar](4) NOT NULL CONSTRAINT [DF__FSFIELDLA__RECFM__63F8CA06] DEFAULT ('A'),
[LINE_ID] [smallint] NOT NULL CONSTRAINT [DF__FSFIELDLA__LINE___64ECEE3F] DEFAULT ((0)),
[LABEL] [nvarchar](500) NULL CONSTRAINT [DF__FSFIELDLA__LABEL__65E11278] DEFAULT (' '),
[FORMAT_CODE] [nvarchar](20) NULL,
[VERSION] [nvarchar](10) NULL,
[FS_SYS_ROWID] [int] NULL,
[TOOLTIP] [nvarchar](512) NULL,
[DISPLAY_TOOLTIP] [smallint] NOT NULL CONSTRAINT [DF__FSFIELDLA__DISPL__2DA7A64D] DEFAULT ((1)),
CONSTRAINT [FS_FIELDLABEL_PK] PRIMARY KEY CLUSTERED
(
[LANGUAGE_CODE] ASC,
[VALIDATION_CODE] ASC,
[DATA_NAME] ASC,
[RECFMT_CODE] ASC,
[LINE_ID] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

最佳答案

也许,您的列在 SQL Server 2016 中有值。另一方面,在 SQL 2017 中,您的列没有值。

您可以删除 FS_FIELDLABEL_PK 并更改您的数据类型,然后再次添加您的约束。

关于sql - 仅在一台服务器上更改作为主键一方的字段时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57255873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com