Создайте хранимую процедуру для Polybase — невозможно передать параметр

[Публикация вопроса от клиента]

Я хотел бы выполнять периодические загрузки в хранилище данных SQL с помощью Polybase. Мой план состоит в том, чтобы создать хранимую процедуру, которая принимает параметр «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 

Сообщение об ошибке, которое я получаю:

> Parse error at line: 25, column: 16: Incorrect syntax near
> '@location'.

person Nicolle Anger - MSFT    schedule 01.09.2015    source источник


Ответы (1)


Вы не можете использовать переменные в операторах 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
person Sahaj Saini - MSFT    schedule 01.09.2015