Sql server 发布到SQL Azure失败,错误为';无法删除外部数据源';消息

Sql server 发布到SQL Azure失败,错误为';无法删除外部数据源';消息,sql-server,azure,azure-sql-database,sqlproj,Sql Server,Azure,Azure Sql Database,Sqlproj,我的解决方案中有一个SQL项目(.sqlproj),目标平台为“Microsoft Azure SQL数据库V12” 最近,我添加了一个外部数据源和几个针对该数据源的外部表 ExternalCSVLists.sql文件: CREATE EXTERNAL DATA SOURCE [ExternalCSVLists] WITH ( TYPE = RDBMS, LOCATION = 'location.windows.net', DATABASE_NAME = '$(CSV

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

最近,我添加了一个
外部数据源
和几个针对该数据源的
外部表

ExternalCSVLists.sql文件:

CREATE EXTERNAL DATA SOURCE [ExternalCSVLists] WITH
(  
    TYPE = RDBMS,
    LOCATION = 'location.windows.net',
    DATABASE_NAME = '$(CSVLists)',
    CREDENTIAL = RemoteConnectionCredential
)
外部表的示例(IntegerListContent.sql文件)

第一次出版还行

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

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

我检查了发布脚本,发现它试图删除并创建外部数据源。跳过外部表(这可能是正常的,因为我没有更改它们)

所以

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

2) 那么为什么它会忽略依赖的
外部表


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

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

但解决办法是引入一个预先部署步骤,放弃所有

  • 桌子和
  • 观点

引用了外部数据源的。。。我本希望DACPAC能够独立完成这项工作;但我想我们生活在一个不完美的世界。

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

但是,只有在外部数据源中没有任何更改时,它才起作用


我打开了一个反馈。如果您愿意,您可以支持该案例。

我采用了上述方法,并在我的DevOps发布管道中实现了这一点:

  • 使用Azure SQL数据库部署任务运行SQL脚本以删除目标数据库中的所有外部对象。这可以防止普通部署中可能发生的“无法删除对象”错误
  • 使用Azure SQL数据库部署任务,使用忽略除外部对象以外的所有对象类型的publish.xml配置文件执行数据库部署。这将使用正确的定义重新创建在上一步中删除的所有对象
  • 
    真的
    假的
    真的
    真的
    真的
    真的
    真的
    真的
    1.
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    假的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    真的
    
  • 使用另一个Azure SQL数据库部署任务,使用忽略所有外部对象类型的publish.xml配置文件执行数据库部署
  • 
    真的
    假的
    真的
    真的
    真的
    真的
    真的
    真的
    1.
    真的
    真的
    真的
    真的
    真的
    
    CREATE EXTERNAL TABLE [WebApp].[IntegerListContent] 
    (  
         [ListId] INT,
         [Value] int 
    )
    WITH  
    (  
        DATA_SOURCE = [ExternalCSVLists]
    ) 
    
    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
    
    <?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>
    
    <?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>