2014-10-03 2 views
0

У нас есть две базы данных, которые говорят «D1» и «D2». В каждой базе данных есть одна таблица, скажем, T1 в D1 и T2 в D2. Теперь я хочу, чтобы написать процедуру магазина в D1 базы данных, которая будет иметь доступ таблицы в базе данных D2-то вроде ниже код ...SQL Azure - запросы к кросс-базе данных

USE D1 
GO 
Create or replace sp_test 
(
    --other detials 

    SELECT * FROM D2.dbo.T2 
) 
GO 

Любая идея, как я могу это сделать?

Примечание: Раньше мы использовали обе базы данных на одном сервере. Поэтому у меня не было никаких проблем. Но теперь, после перехода на Azure, я не знаю, как мы можем это сделать. Также по моей информации у нас нет связанной функции сервера, доступной в SQL-Azure.

ответ

2

Azure SQL Database (или SQL Azure) не поддерживает запросы кросс-базы данных, так что нет никакой работы вокруг, кроме избавления от этих запросов межбазовых ...

0

Если вы в SQL Azure V12 и на вашем сервере есть несколько баз данных с одинаковой версией, и вы не постоянно зависите от транзакций с перекрестными базами данных (я имел в виду только несколько вещей, обратите внимание, что не для кросс-запросов к базе данных, это все равно нужно делать на уровне приложения), вы может использовать sp_bindsession. Если вам повезет, вы можете завершить обе базы данных на одном сервере. Рекомендация заключается не в разработке приложений, а в одно время.

0

Это возможно в SQL Azure. По существу вам необходимо создать внешний источник данных в D1 и вечную таблицу в D1, которая соответствует целевой таблице в D2.

Что-то вроде этого

USE D1 
-- Not sure if the following line is necessary. Omit it and if SQL Squeals, put it in. 
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MasterKeyPassword'; 
CREATE DATABASE SCOPED CREDENTIAL D2User WITH IDENTITY='D2UserID', SECRET='D2UserPassword'; 
CREATE EXTERNAL DATA SOURCE D2DataSource 
WITH 
(
    TYPE=RDBMS, 
    LOCATION='d2.database.windows.net', 
    DATABASE_NAME='D2', 
    CREDENTIAL=D2User 
); 
CREATE EXTERNAL TABLE [dbo].[T2](
    [ID] [INT] NOT NULL, 
    [Info] [NVARCHAR] (25) NULL 
) 
WITH 
(
    DATA_SOURCE = D2DataSource 
); 

Конечно, вы должны заменить все необходимые детали с собственными выбранными паролями, локациями базы данных и т.д.

Смежные вопросы