我在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 更改为“无”,然后从预部署脚本中调用该脚本,但该项目再次无法构建,并引发以下错误。
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.
这真的让我感到惊讶,因为我认为如果您将其设置为“无”,它不会尝试解析或构建它,并且只有在创建发布脚本时才会替换所需的值,然后在尝试执行它时会如果有则抛出错误。
我读了很多帖子,但似乎没有人遇到过这个问题,也许我的做法全错了?
非常感谢您的回答
你曾经让它发挥作用吗?我正在尝试同样的事情。