我们可以在 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)
谢谢
最佳答案
您的 secret 可能需要用引号引起来。此外,这一切都需要在一行上或与 +
如果你打印了这个字符串,它可能是显而易见的。试试这个:
SET @command =
'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential ' +
'WITH IDENTITY = ''SHARED ACCESS SIGNATURE''' +
',SECRET = '''+ @SAS + ''''
关于sql-server - 我们可以在 Azure 上的 T-SQL 过程中创建数据库范围的凭据吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48109895/