我们可以在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)
由于
答案 0 :(得分:3)
您的秘密可能需要被引号括起来。这一切都需要在一行上或与+
如果你打印了字符串,那可能很明显。试试这个:
SET @command =
'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential ' +
'WITH IDENTITY = ''SHARED ACCESS SIGNATURE''' +
',SECRET = '''+ @SAS + ''''