SQL Azure - 创建外部数据源:位置作为参数?
SQL Azure - Create External Data Source: Location as a Parameter?
我正在尝试创建一个 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 带单引号替换变量,它会起作用。 IE。
CREATE EXTERNAL DATA SOURCE uploads
WITH
(
TYPE = BLOB_STORAGE,
LOCATION = 'https://somestorageaccount.blob.core.windows.net/uploads'
CREDENTIAL = azurecred
);
经过试验,我无法让它工作。可能吗?
您不能在 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
我正在尝试创建一个 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 带单引号替换变量,它会起作用。 IE。
CREATE EXTERNAL DATA SOURCE uploads
WITH
(
TYPE = BLOB_STORAGE,
LOCATION = 'https://somestorageaccount.blob.core.windows.net/uploads'
CREDENTIAL = azurecred
);
经过试验,我无法让它工作。可能吗?
您不能在 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