SQL Azure - Создать внешний источник данных: расположение в качестве параметра?

Я пытаюсь создать хранимую процедуру SQL, которая создаст внешний источник данных. Местоположение должно быть параметром, передаваемым в процедуру (например, контейнер учетной записи хранения Azure). Я не могу получить переменную Location, которая будет принята (как в фрагменте кода ниже).

DECLARE @Location varchar(max)
SET @Location = 'https://somestorageaccount.blob.core.windows.net/uploads'

PRINT @Location
--DROP EXTERNAL DATA SOURCE uploads

CREATE EXTERNAL DATA SOURCE uploads
WITH
(
    TYPE = BLOB_STORAGE,
    LOCATION = @Location,
    CREDENTIAL = azurecred
);

Сообщение об ошибке:

Msg 102, Level 15, State 1, Line 11
Incorrect syntax near '@Location'.

Это работает, если URL с одинарными кавычками заменяет переменную. Т.е.

CREATE EXTERNAL DATA SOURCE uploads
WITH
(
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://somestorageaccount.blob.core.windows.net/uploads'
    CREDENTIAL = azurecred
);

После экспериментов я не могу заставить это работать. Является ли это возможным?

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
Другие вопросы по тегам