创建数据库范围的凭据语法

时间:2016-11-01 15:53:20

标签: sql tsql visual-studio-2015 azure-sql-database credentials

在VS2015(Azure SQL V12项目)中处理数据库项目。我需要使用外部表引用,所以我必须创建一个凭证对象来与远程服务器进行身份验证。下面的代码和错误,不确定我缺少什么。

SQL代码

创建数据库SCOPED CREDENTIAL [mycredential] WITH IDENTITY ='SomeIdentity', SECRET ='SomeSecret';

错误

  

'[mycredential]'附近的语法不正确。期待'='   “IDENTITY”附近的语法不正确。期待AW_CHANGE_TRACKING_CONTEXT,AW_ID,   AW_XMLNAMESPACES或QUOTED_ID。

1 个答案:

答案 0 :(得分:1)

好吧,我在VS2017 DB项目中也遇到了这个问题,我的做法是使用存储的proc,这样intellisense不会触发错误。当我发现运行时代码正在工作。以下是我使用的存储过程:

您可以在“ CREATE EXTERNAL TABLE”语句的“ YOUR_EXTERN_TABLE”语句中定义外部引用表(在此示例中,该表设置为具有ID和Name列的架构):

CREATE PROCEDURE [dbo].[StoredProcWithExternalRefs] 
 @DatabaseName AS NVARCHAR(30), 
 @Passw AS NVARCHAR(100), 
 @SaID AS NVARCHAR(100), 
 @DataSource AS NVARCHAR(512), 
 @Catalog AS NVARCHAR(200)
AS
BEGIN

SET NOCOUNT ON;
SET IMPLICIT_TRANSACTIONS OFF;


DECLARE @SQLString nvarchar(200);  

PRINT 'START'

PRINT 'CREATE DATABASE'

SET @SQLString =  N'CREATE DATABASE [' + @DatabaseName + ']'

EXECUTE sp_executesql @SQLString

SET @SQLString =  N'CREATE MASTER KEY ENCRYPTION BY PASSWORD = ''' + @Passw + ''';

CREATE DATABASE SCOPED CREDENTIAL credential_name   
WITH IDENTITY = ''' + @SaID + '''  
    , SECRET = ''' + @Passw + ''';

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION=''' + @DataSource + ''',
    DATABASE_NAME=''' + @Catalog + ''',
    CREDENTIAL= credential_name
);

CREATE EXTERNAL TABLE YOUR_EXTERN_TABLE(
    [Id] [int] NOT NULL,
    [Name] [nvarchar](20) NOT NULL,
) WITH ( DATA_SOURCE = RemoteReferenceData );'
...


EXECUTE sp_executesql @SQLString

PRINT 'DONE.'




END

您可以在“ CREATE EXTERNAL TABLE”语句和模式中添加具有相同模式的其他外部表。

以下是指导您的参考:https://sqldusty.com/2017/05/30/setting-up-cross-database-queries-in-azure-sql-database/