我们可以在Azure上的T-SQL过程中创建Database Scoped凭证

时间:2018-01-05 08:33:22

标签: sql-server azure stored-procedures azure-sql-database

我们可以在Azure SQL上的T-SQL过程中为共享访问签名创建数据库范围的凭据吗?

我们正在尝试批量插入存储在Azure blob上的csv文件中的数据

以下是步骤

  • 使用JAVA创建SAS凭据

  • Java将调用存储过程来创建/更改外部数据源,并将SAS凭据作为参数传递给此过程

  • 上述程序将在内部调用另一个程序来执行BULK INSERT

我们正面临通过T-SQL程序创建数据库作用域凭证的挑战,有人可以确认这种方法是否真的可行

如果我们能够获得相同的示例代码,那将会很有帮助。

我已经看到了在Microsoft网站上创建数据库作用域凭据的语法,当我们将脚本作为独立语句运行但我们无法使用过程编译代码时,它可以正常工作

我们尝试了下面的代码

CREATE procedure prc_create_external_data_source @SAS VARCHAR(100)
AS
BEGIN

SET nocount ON

DECLARE @command varchar(MAX);

PRINT 'Shared Access Key Received Key: '+@SAS;



SET @command = 

'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
WITH IDENTITY = ''SHARED ACCESS SIGNATURE'',
SECRET = '+@SAS


EXECUTE (@command);

PRINT 'Database Scoped Credential Created';



END

执行此程序后,我们得到以下错误消息

EXECUTE prc_create_external_data_source '1245632512344'

错误号码:102错误消息:' 1245632512344'附近的语法不正确。行号:3过程名称:(SQL状态:S0001 - 错误代码:0)

由于

1 个答案:

答案 0 :(得分:3)

您的秘密可能需要被引号括起来。这一切都需要在一行上或与+

连接

如果你打印了字符串,那可能很明显。试试这个:

SET @command =     
'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential ' +
'WITH IDENTITY = ''SHARED ACCESS SIGNATURE''' + 
',SECRET = '''+ @SAS + ''''