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