【问题标题】:Create a Stored Procedure for Polybase - Cannot pass in parameter为 Polybase 创建存储过程 - 无法传入参数
【发布时间】:2015-09-01 10:07:57
【问题描述】:

[客户发帖提问]

我想使用 Polybase 定期加载到 SQL 数据仓库。我的计划是创建一个存储过程,该过程采用“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'.

【问题讨论】:

    标签: azure-sqldw


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多