SSDT数据库项目 - 使用SQLCMD变量设置外部表数据源

时间:2017-04-19 06:21:59

标签: sql-server azure-sql-database sql-server-data-tools sqlcmd

我在VS中创建了一个Azure SQL数据库项目。我的存储过程必须引用另一个Azure SQL数据库中的表。所以我定义了一个外部数据源,如下所示:

CREATE EXTERNAL DATA SOURCE CRM_UAT  
WITH (   
    TYPE = RDBMS,  
    LOCATION = 'blah.database.windows.net',  
    DATABASE_NAME = 'crm-uat',  
    CREDENTIAL = CRM_UAT_CRMUser 
);

然后我定义了我的外部表来引用这个外部数据源,如下所示:

CREATE EXTERNAL TABLE [dbo].[venue] (  
    Id uniqueidentifier NOT NULL,
    name nvarchar(100) NULL
)
WITH (  
    DATA_SOURCE = CRM_UAT  
);

现在我想将我的解决方案部署到UAT以及PROD,我试图在外部表定义中参数化数据源引用。

所以,在我的项目中,在属性下,我创建了一个名为$(DataSource)的SQLCMD变量。然后我将外部表的定义更改为:

CREATE EXTERNAL TABLE [dbo].[venue] (  
    Id uniqueidentifier NOT NULL,
    name nvarchar(100) NULL
)
WITH (  
    DATA_SOURCE = [$(DataSource)]
);

我创建了2个发布配置文件,一个用于UAT,另一个用于PROD。问题是我现在无法构建我的项目,它不断抛出错误:

"Error      SQL71501: SqlExternalTable: [dbo].[venue] has an unresolved reference to SqlExternalDataSource [$(DataSource)]".

好的,所以它试图解析我的脚本但不喜欢它。所以我试图将我的脚本BuildAction更改为'none',然后从我的预部署脚本调用脚本,但同样项目不会构建,它会抛出以下错误。

Msg 102, Level 15, State 1, Line 13
Incorrect syntax near 'EXTERNAL'.
Msg 1038, Level 15, State 4, Line 28
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. 
Aliases defined as "" or [] are not allowed. Change the alias to a valid name.

我真的很惊讶,因为我认为如果你把它设置为'none',它不会尝试解析或构建它,只有当它创建发布脚本时才会替换所需的值,然后尝试执行如果有的话会引发错误。

我已经阅读了这么多帖子,但似乎没有人遇到过这个问题,也许我认为这一切都错了?

非常感谢您的回答

0 个答案:

没有答案