繁体   English   中英

发布到 SQL Azure 失败并显示“无法删除外部数据源”消息

[英]Publish to SQL Azure fails with 'Cannot drop the external data source' message

我的解决方案中有一个 SQL 项目 (.sqlproj),目标平台为“Microsoft Azure SQL 数据库 V12”。

最近我添加了一个external data source和几个针对这个数据源的external tables

外部CSVLists.sql文件:

CREATE EXTERNAL DATA SOURCE [ExternalCSVLists] WITH
(  
    TYPE = RDBMS,
    LOCATION = 'location.windows.net',
    DATABASE_NAME = '$(CSVLists)',
    CREDENTIAL = RemoteConnectionCredential
)

外部表示例( IntegerListContent.sql文件)

CREATE EXTERNAL TABLE [WebApp].[IntegerListContent] 
(  
     [ListId] INT,
     [Value] int 
)
WITH  
(  
    DATA_SOURCE = [ExternalCSVLists]
) 

第一次发布成功。

现在,当我再次发布时(没有对外部表或数据源进行任何更改),我收到以下错误:

正在删除 [ExternalCSVLists]... (415,1):SQL72014:.Net SqlClient 数据提供程序:消息 33165,级别 16,状态 1,第 1 行无法删除外部数据源“ExternalCSVLists”,因为它被外部表使用。

我检查了发布脚本并注意到它尝试删除并创建外部数据源。 外部表被跳过(这可能没问题,因为我没有改变它们)。

所以,

1) 当所有这些数据源与已发布的数据源相同时,为什么会产生drop external data source语句

2)为什么它会忽略依赖的external tables呢?

我的发布设置几乎是默认设置(未选中“放置”选项卡中的任何选项)。 谢谢!

我遇到了同样的问题; 不幸的是,我无法弄清楚为什么首先会产生这个问题。

但解决方法是引入一个部署前步骤,该步骤丢弃所有

  • 表 AND
  • 观看次数

引用了外部数据源...我本来希望 DACPAC 自行执行此操作; 但我想我们生活在一个不完美的世界里。

我也有这个问题。 作为解决方法,您还可以使用: /p:DoNotDropObjectTypes=ExternalDataSources

但它只有在您的外部数据源没有更改时才有效。

在 microsoft 上打开了一个反馈案例 如果你愿意,你可以支持这个案例。

我采用了上述方法,并将其放入我的 DevOps 发布管道中:

  1. 运行 SQL 脚本以使用 Azure SQL 数据库部署任务删除目标数据库中的所有外部对象。 这可以防止在普通部署中可能发生的“无法删除对象”错误。
declare @sql as nvarchar(max) 
; with cmds as (
select 
    CONCAT('drop external table ' ,QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) , '.' , QUOTENAME(OBJECT_NAME(t.object_id))) as Cmd
from sys.external_tables t
union all 
select 
    'drop external data source ' + QUOTENAME(s.name)
from sys.external_data_sources s
) 
select @sql= STRING_AGG(cmd,';')
from cmds 
print @sql

if(len(@sql) > 0)
begin
exec sp_executesql @sql
end
  1. 使用 Azure SQL 数据库部署任务使用publish.xml 配置文件执行数据库部署,该配置文件忽略除外部对象之外的所有对象类型。 这将重新创建在上一步中删除的所有对象,但具有正确的定义。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName></TargetDatabaseName>
    <DeployScriptFileName></DeployScriptFileName>
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
    <GenerateSmartDefaults>True</GenerateSmartDefaults>
    <DropObjectsNotInSource>True</DropObjectsNotInSource>
    <DoNotDropPermissions>True</DoNotDropPermissions>
    <DoNotDropRoleMembership>True</DoNotDropRoleMembership>
    <DoNotDropUsers>True</DoNotDropUsers>
    <IgnoreColumnOrder>True</IgnoreColumnOrder>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <ExcludeAggregates>True</ExcludeAggregates>
    <ExcludeApplicationRoles>True</ExcludeApplicationRoles>
    <ExcludeAssemblies>True</ExcludeAssemblies>
    <ExcludeAsymmetricKeys>True</ExcludeAsymmetricKeys>
    <ExcludeAudits>True</ExcludeAudits>
    <ExcludeBrokerPriorities>True</ExcludeBrokerPriorities>
    <ExcludeCertificates>True</ExcludeCertificates>
    <ExcludeClrUserDefinedTypes>True</ExcludeClrUserDefinedTypes>
    <ExcludeColumnEncryptionKeys>True</ExcludeColumnEncryptionKeys>
    <ExcludeColumnMasterKeys>True</ExcludeColumnMasterKeys>
    <ExcludeContracts>True</ExcludeContracts>
    <ExcludeCryptographicProviders>True</ExcludeCryptographicProviders>
    <ExcludeDatabaseAuditSpecifications>True</ExcludeDatabaseAuditSpecifications>
    <ExcludeDatabaseRoles>True</ExcludeDatabaseRoles>
    <ExcludeDatabaseTriggers>True</ExcludeDatabaseTriggers>
    <ExcludeDefaults>True</ExcludeDefaults>
    <ExcludeEndpoints>True</ExcludeEndpoints>
    <ExcludeErrorMessages>True</ExcludeErrorMessages>
    <ExcludeEventNotifications>True</ExcludeEventNotifications>
    <ExcludeEventSessions>True</ExcludeEventSessions>
    <IgnoreExtendedProperties>True</IgnoreExtendedProperties>
    <ExcludeExternalDataSources>False</ExcludeExternalDataSources>
    <ExcludeFileTables>True</ExcludeFileTables>
    <ExcludeFilegroups>True</ExcludeFilegroups>
    <ExcludeFullTextCatalogs>True</ExcludeFullTextCatalogs>
    <ExcludeFullTextStoplists>True</ExcludeFullTextStoplists>
    <ExcludeLinkedServerLogins>True</ExcludeLinkedServerLogins>
    <ExcludeLinkedServers>True</ExcludeLinkedServers>
    <ExcludeLogins>True</ExcludeLogins>
    <ExcludePartitionFunctions>True</ExcludePartitionFunctions>
    <ExcludeMessageTypes>True</ExcludeMessageTypes>
    <ExcludePartitionSchemes>True</ExcludePartitionSchemes>
    <IgnorePermissions>True</IgnorePermissions>
    <ExcludeQueues>True</ExcludeQueues>
    <ExcludeRemoteServiceBindings>True</ExcludeRemoteServiceBindings>
    <IgnoreRoleMembership>True</IgnoreRoleMembership>
    <ExcludeRoutes>True</ExcludeRoutes>
    <ExcludeRules>True</ExcludeRules>
    <ExcludeScalarValuedFunctions>True</ExcludeScalarValuedFunctions>
    <ExcludeSearchPropertyLists>True</ExcludeSearchPropertyLists>
    <ExcludeSecurityPolicies>True</ExcludeSecurityPolicies>
    <ExcludeSequences>True</ExcludeSequences>
    <ExcludeServerAuditSpecifications>True</ExcludeServerAuditSpecifications>
    <ExcludeServerRoleMembership>True</ExcludeServerRoleMembership>
    <ExcludeServerRoles>True</ExcludeServerRoles>
    <ExcludeServerTriggers>True</ExcludeServerTriggers>
    <ExcludeServices>True</ExcludeServices>
    <ExcludeSignatures>True</ExcludeSignatures>
    <ExcludeStoredProcedures>True</ExcludeStoredProcedures>
    <ExcludeSymmetricKeys>True</ExcludeSymmetricKeys>
    <ExcludeSynonyms>True</ExcludeSynonyms>
    <ExcludeTableValuedFunctions>True</ExcludeTableValuedFunctions>
    <ExcludeTables>True</ExcludeTables>
    <ExcludeUserDefinedDataTypes>True</ExcludeUserDefinedDataTypes>
    <ExcludeUserDefinedTableTypes>True</ExcludeUserDefinedTableTypes>
    <ExcludeUsers>True</ExcludeUsers>
    <ExcludeViews>True</ExcludeViews>
    <ExcludeXmlSchemaCollections>True</ExcludeXmlSchemaCollections>
    <ExcludeCredentials>True</ExcludeCredentials>
  </PropertyGroup>
</Project>
  1. 使用另一个 Azure SQL 数据库部署任务使用publish.xml 配置文件执行数据库部署,该配置文件忽略所有外部对象类型。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName></TargetDatabaseName>
    <DeployScriptFileName></DeployScriptFileName>
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
    <GenerateSmartDefaults>True</GenerateSmartDefaults>
    <DropObjectsNotInSource>True</DropObjectsNotInSource>
    <DoNotDropPermissions>True</DoNotDropPermissions>
    <DoNotDropRoleMembership>True</DoNotDropRoleMembership>
    <DoNotDropUsers>True</DoNotDropUsers>
    <IgnoreColumnOrder>True</IgnoreColumnOrder>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <ExcludeCredentials>True</ExcludeCredentials>
    <ExcludeDatabaseScopedCredentials>True</ExcludeDatabaseScopedCredentials>
    <ExcludeExternalTables>True</ExcludeExternalTables>
    <ExcludeExternalFileFormats>True</ExcludeExternalFileFormats>
    <ExcludeExternalDataSources>True</ExcludeExternalDataSources>
  </PropertyGroup>
</Project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM