MS Fabric中SQL主键约束语法与无效对象名问题求助
Microsoft Fabric数据仓库脚本问题解决方案
问题1:PRIMARY KEY NONCLUSTERED ... NOT ENFORCED语句警告
在Fabric数据仓库中,PRIMARY KEY NONCLUSTERED ... NOT ENFORCED是定义逻辑主键,引擎不会实际强制执行约束,因此出现警告属于预期行为,不影响功能正常运行。若需消除警告,可按以下方式处理:
- 确保主键列设置为
NOT NULL:即使约束不强制,保持列非空能提升数据一致性,执行语句:ALTER TABLE YourTargetTable ALTER COLUMN YourPrimaryKeyColumn INT NOT NULL; - 临时关闭ANSI警告(仅针对该主键语句):
SET ANSI_WARNINGS OFF; ALTER TABLE YourTargetTable ADD PRIMARY KEY NONCLUSTERED (YourPrimaryKeyColumn) NOT ENFORCED; SET ANSI_WARNINGS ON; - 若操作的是外部表或Lakehouse表,
NOT ENFORCED是必填项,此类警告可直接忽略。
问题2:视图创建时"Invalid object name 'ExternalData.dbo.staging_sales'"报错
该错误源于对象引用格式错误或外部表未正确创建,解决步骤如下:
- 确认外部数据源存在:执行语句查看已创建的外部数据源:
检查是否有名为SELECT name FROM sys.external_data_sources;ExternalData的外部数据源,若不存在需先按教程步骤创建。 - 核查外部表的完整归属:执行语句查看所有外部表的详细信息:
对照SELECT name, data_source_id, schema_id FROM sys.external_tables;sys.schemas和sys.external_data_sources的ID,确定staging_sales表的正确引用格式(应为[ExternalDataSourceName].[SchemaName].[staging_sales])。 - 修正视图中的引用:若外部数据源为
ExternalData、表在dboschema下,确保视图语句中引用为ExternalData.dbo.staging_sales;如果是Lakehouse中的表,引用格式应为[LakehouseName].[SchemaName].[staging_sales]。 - 切换正确的数据库上下文:执行
USE YourDataWarehouseName;确保当前操作在目标数据仓库中,而非Lakehouse或其他数据库。 - 无需手动创建
ExternalDataschema:该名称应为外部数据源名称,不是schema,手动创建schema无法解决外部表引用问题。
内容的提问来源于stack exchange,提问作者HamidBee
相关产品推荐
相关产品推荐

