为Polybase创建存储过程 - 无法传入参数

Nic*_*SFT 2 azure-sqldw

[发布客户提问]

我想使用Polybase定期加载到SQL数据仓库中.我的计划是创建一个存储过程,该过程接受Create External Table的"LOCATION"参数,但由于语法原因,该参数失败.这是我编写的代码示例:

alter PROCEDURE CETFromNewLocation
as
begin
Declare @location varchar(100)='data/2015/2015831';
Create External TABLE stg_tbl (
    [DateId] int NULL
)
WITH (
LOCATION= @location,
      DATA_SOURCE = my_external_source,
      FILE_FORMAT = my_external_file_format,
      REJECT_TYPE = VALUE,
      REJECT_VALUE = 0
)
end 
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

> Parse error at line: 25, column: 16: Incorrect syntax near
> '@location'.
Run Code Online (Sandbox Code Playgroud)

Sah*_*SFT 6

您不能在DDL语句中使用变量.尝试使用动态sql - 形成DDL的字符串,并使用sp_executesql存储过程执行它,如下所示.

ALTER PROCEDURE CETFromNewLocation    AS

BEGIN

DECLARE @location varchar(100)

SET @location = 'data/2015/2015831'

DECLARE @CreateExternalTableString varchar(100)

SET @CreateExternalTableString = 
                                    'Create External TABLE stg_tbl (
                                                  [DateId] int NULL
                                    )
                                    WITH (LOCATION = ' + @location + ',                                      
                                             DATA_SOURCE = my_external_source,
                                             FILE_FORMAT = my_external_file_format,
                                             REJECT_TYPE = VALUE,
                                             REJECT_VALUE = 0
                                    )'

EXEC sp_executesql @CreateExternalTableString

END
Run Code Online (Sandbox Code Playgroud)