If the job does not exist, an error from msdb.dbo.sp_delete_job is expected

本文介绍了一种在执行SQL文件“InstallSqlState.sql”时遇到的特定错误:SQL错误号14274,该错误涉及到无法从MSX服务器上发起作业的操作。文章提供了具体的解决方案,包括如何使用SQL命令来修复此问题。

执行 SQL 文件“InstallSqlState.sql”时发生错误。SQL 错误号为 14274,SqlException 消息为: 无法添加、更新或删除从 MSX 服务器上发起的作业(或其步骤或调度)。
If the job does not exist, an error from msdb.dbo.sp_delete_job is expected.


处理方式:update sysjobs set originating_server=' 服务器名称'
重新执行

InstallSqlState.sql

<think>好的,我现在需要解决用户的问题:“Object is invalid. Extended properties are not permitted on 'dbo.report_info.enterprise_name', or the object does not exist.” 首先,我需要理解这个错误的含义。用户在尝试为扩展属性(extended property)添加描述时遇到了这个错误,提示对象无效,可能是因为指定的列不存在或者扩展属性不允许在该对象上使用。 首先,回顾SQL Server中扩展属性的使用。`sp_addextendedproperty`存储过程用于为数据库对象(如表、列、约束等)添加注释或说明。其语法通常是指定对象类型(如表、列)、模式(如dbo)、对象名(如表名)和列名(如果是列的话)。 用户的错误信息中提到的是`dbo.report_info.enterprise_name`,这说明用户尝试为`report_info`表中的`enterprise_name`列添加扩展属性,但该列不存在或者对象无效。可能的原因有几个: 1. **列不存在**:`report_info`表中没有名为`enterprise_name`的列。用户可能在创建表时定义了其他列名(比如`company_name`),但在添加扩展属性时错误地写成了`enterprise_name`。 2. **拼写错误或大小写问题**:SQL Server在某些排序规则下对对象名的大小写敏感,如果列名的拼写或大小写与实际表中的列不一致,会导致找不到对象。 3. **对象权限问题**:用户可能没有足够的权限来为该对象添加扩展属性,但这种情况通常会有不同的错误提示,而这里的错误更可能是对象不存在。 接下来,我需要详细分析每个可能的原因,并给出解决方法。例如,如果是列名错误,用户需要检查表结构,确认实际列名,然后在`sp_addextendedproperty`中使用正确的列名。如果是大小写问题,需要确保列名的大小写与表中定义的一致。 另外,还需要考虑扩展属性是否允许在该对象上使用。通常,扩展属性可以应用于列,但如果对象类型不正确(比如错误地指定了对象类型为表而不是列),也可能导致错误。需要确认`sp_addextendedproperty`的参数是否正确,特别是`@level0type`、`@level0name`、`@level1type`、`@level1name`、`@level2type`、`@level2name`这些参数是否正确对应到列对象。 总结来说,解决这个问题的步骤应该是:首先检查`report_info`表中是否存在`enterprise_name`列;如果不存在,修正列名为表中实际存在的列名;如果存在,检查是否有拼写或大小写错误;最后确认扩展属性的参数是否正确指定了列对象。 现在需要将这些分析整理成用户易懂的解释,并给出具体的示例和解决方法,同时按照要求生成相关问题。 </think>这个错误提示的含义是:**SQL Server 无法为 `dbo.report_info` 表的 `enterprise_name` 列添加扩展属性(注释),因为该列不存在,或扩展属性不允许作用于该对象**。 ### 错误原因分析 扩展属性(通过 `sp_addextendedproperty` 添加)需要绑定到一个**已存在的数据库对象**(如表、列、约束等)。当目标对象(如列)不存在,或参数传递错误时,会触发此错误。具体可能的原因如下: #### 1. 目标列 `enterprise_name` 不存在(最常见) - **场景**:用户创建 `report_info` 表时,实际定义的列名是 `company_name`,但在添加扩展属性时错误地写成了 `enterprise_name`。 例如: ```sql -- 表定义时列名为 company_name CREATE TABLE dbo.report_info ( company_name NVARCHAR(100) -- 实际列名是 company_name ); -- 添加扩展属性时错误引用 enterprise_name EXEC sp_addextendedproperty 'MS_Description', '企业名称', 'SCHEMA', 'dbo', 'TABLE', 'report_info', 'COLUMN', 'enterprise_name'; -- 错误列名 ``` SQL Server 检查到 `report_info` 表中没有 `enterprise_name` 列,因此拒绝执行并报错。 #### 2. 列名拼写或大小写错误(取决于排序规则) - **场景**:表中存在目标列,但名称拼写错误(如 `EnterpriseName` 写成 `enterprise_name`),或 SQL Server 实例的排序规则(如 `Case_Sensitive`)要求严格匹配大小写。 例如,若表中列名为 `EnterpriseName`(首字母大写),而扩展属性中写成 `enterprise_name`(全小写),在区分大小写的排序规则下会报错。 #### 3. 扩展属性参数传递错误(对象类型不匹配) - **场景**:`sp_addextendedproperty` 的参数未正确指定对象层级(如错误地将列对象标记为表对象)。 `sp_addextendedproperty` 的参数需要按层级指定对象类型(`@level0type` 到 `@level2type`),例如为列添加注释时,`@level2type` 必须是 `COLUMN`,`@level2name` 是列名。若参数顺序或类型错误(如遗漏 `COLUMN` 层级),会导致 SQL Server 无法定位到目标列。 ### 解决方法 #### 步骤1:确认目标列是否存在 执行以下查询,检查 `report_info` 表中是否存在 `enterprise_name` 列: ```sql SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'report_info' AND COLUMN_NAME = 'enterprise_name'; ``` - 若查询无结果:说明列不存在,需修正扩展属性中的列名为表中实际存在的列名(如 `company_name`)。 - 若查询有结果:进入步骤2。 #### 步骤2:检查列名拼写和大小写 - 确认扩展属性中的列名与 `INFORMATION_SCHEMA.COLUMNS` 查询结果中的 `COLUMN_NAME` 完全一致(包括大小写)。 例如,若实际列名是 `company_name`,则扩展属性的 `@level2name` 必须是 `'company_name'`。 #### 步骤3:验证扩展属性的参数格式 为列添加扩展属性的正确语法如下(以 `company_name` 列为例): ```sql EXEC sp_addextendedproperty @name = 'MS_Description', -- 扩展属性名称(固定) @value = '企业名称', -- 注释内容 @level0type = 'SCHEMA', @level0name = 'dbo', -- 模式层级 @level1type = 'TABLE', @level1name = 'report_info', -- 表层级 @level2type = 'COLUMN', @level2name = 'company_name'; -- 列层级(关键) ``` - 确保 `@level2type` 为 `'COLUMN'`,`@level2name` 为实际列名。 ### 总结 此错误的核心原因是目标列不存在或扩展属性参数错误。解决方法是:先确认列是否存在,再检查列名拼写/大小写,最后验证扩展属性的参数格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值