sql-server - 我们可以在 Azure 上的 T-SQL 过程中创建数据库范围的凭据吗

标签 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)

谢谢

最佳答案

您的 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/

相关文章:

postgresql - Javascript encodeURI 类似于 postgresql 中的函数?

php - 从 PHP SQL 查询迁移到 MySQL 存储过程的问题

sql - Join 子句中的 case 语句

java - 如何使用 Java 配置到 Azure 上托管的 MySQL 的 SSL 连接?

azure - TableQuery.CombineFilters 中 FilterCondition 的最大数量

c# - .NET Core Web API 作为 Azure 应用服务上的虚拟应用程序

mysql - 多个处理程序冲突

用于将字符串拆分为行和列的 SQL 查询

sql-server - 更改表所有者

sql - 从 SQL 分析时间相关的事件日志