![](/img/trans.png)
[英]Permissions issue trying to create an external data source on Azure SQL Database
[英]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
呢?
我的发布设置几乎是默认设置(未选中“放置”选项卡中的任何选项)。 谢谢!
我遇到了同样的问题; 不幸的是,我无法弄清楚为什么首先会产生这个问题。
但解决方法是引入一个部署前步骤,该步骤丢弃所有
引用了外部数据源...我本来希望 DACPAC 自行执行此操作; 但我想我们生活在一个不完美的世界里。
我也有这个问题。 作为解决方法,您还可以使用: /p:DoNotDropObjectTypes=ExternalDataSources
但它只有在您的外部数据源没有更改时才有效。
我在 microsoft 上打开了一个反馈案例。 如果你愿意,你可以支持这个案例。
我采用了上述方法,并将其放入我的 DevOps 发布管道中:
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.