作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两台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/
我是一名优秀的程序员,十分优秀!