茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1669335 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_00040.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]Microsoft SQL Server 跨資料庫查詢

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Microsoft SQL Server 跨資料庫查詢
跨資料庫查詢

從 SQL Server 2014 (12.x) 開始,記憶體優化資料表不支援跨資料庫交易。 您無法在同時存取記憶體最佳化資料表的相同交易或相同查詢中存取另一個資料庫。 您無法輕鬆地從某一個資料庫的資料表中,將資料複製到另一個資料庫中的記憶體最佳化資料表。

資料表變數並非交易式。 因此,記憶體最佳化資料表變數可以在跨資料庫查詢中使用,也因而有助於將某個資料庫中的資料移至另一個資料庫的記憶體最佳化資料表中。 您可以使用兩筆交易。 在第一筆交易中,將資料從遠端資料表插入變數中。 在第二筆交易中,從變數中將資料插入本機記憶體最佳化資料表。 如需記憶體最佳化資料表變數的詳細資訊,請參閱 使用記憶體最佳化加快暫存資料表與資料表變數的速度。

本例說明將某個資料庫的資料傳送至不同資料庫的記憶體最佳化資料表的方法。

建立測試物件。 在 SQL Server Management Studio 中執行下列 Transact-SQL。
USE master;
GO

SET NOCOUNT ON;

-- Create simple database
CREATE DATABASE SourceDatabase;
ALTER DATABASE SourceDatabase SET RECOVERY SIMPLE;
GO

-- Create a table and insert a few records
USE SourceDatabase;

CREATE TABLE SourceDatabase.[dbo].[SourceTable] (
	[ID] [int] PRIMARY KEY CLUSTERED,
	[FirstName] nvarchar(8)
	);

INSERT [SourceDatabase].[dbo].[SourceTable]
VALUES (1, N'Bob'),
	(2, N'Susan');
GO

-- Create a database with a MEMORY_OPTIMIZED_DATA filegroup

CREATE DATABASE DestinationDatabase
 ON  PRIMARY
( NAME = N'DestinationDatabase_Data', FILENAME = N'D:\DATA\DestinationDatabase_Data.mdf',	SIZE = 8MB),
 FILEGROUP [DestinationDatabase_mod] CONTAINS MEMORY_OPTIMIZED_DATA  DEFAULT
( NAME = N'DestinationDatabase_mod', FILENAME = N'D:\DATA\DestinationDatabase_mod', MAXSIZE = UNLIMITED)
 LOG ON
( NAME = N'DestinationDatabase_Log', FILENAME = N'D:\LOG\DestinationDatabase_Log.ldf', SIZE = 8MB);

ALTER DATABASE DestinationDatabase SET RECOVERY SIMPLE;
GO

USE DestinationDatabase;
GO

-- Create a memory-optimized table
CREATE TABLE [dbo].[DestTable_InMem] (
	[ID] [int] PRIMARY KEY NONCLUSTERED,
	[FirstName] nvarchar(8)
	)
WITH ( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA );
GO

嘗試跨資料庫查詢。 在 SQL Server Management Studio 中執行下列 Transact-SQL。
INSERT [DestinationDatabase].[dbo].[DestTable_InMem]
SELECT * FROM [SourceDatabase].[dbo].[SourceTable]

您應該會收到下列錯誤訊息:

訊息 41317,層級 16,狀態 5
存取記憶體最佳化資料表或原生編譯模組的使用者交易,無法存取多位使用者資料庫或資料庫模型與 msdb,且不能寫入 master。

建立記憶體最佳化資料表類型。 在 SQL Server Management Studio 中執行下列 Transact-SQL。
USE DestinationDatabase;
GO

CREATE TYPE [dbo].[MemoryType]
    AS TABLE
    (
	[ID] [int] PRIMARY KEY NONCLUSTERED,
	[FirstName] nvarchar(8)
    )
    WITH
        (MEMORY_OPTIMIZED = ON);
GO

重新嘗試跨資料庫查詢。 這一次,來源資料會先傳送給記憶體最佳化資料表變數。 接著 table 變數的資料會傳輸至記憶體最佳化資料表。
    -- Declare table variable utilizing the newly created type - MemoryType
    DECLARE @InMem dbo.MemoryType;

    -- Populate table variable
    INSERT @InMem SELECT * FROM SourceDatabase.[dbo].[SourceTable];

    -- Populate the destination memory-optimized table
    INSERT [DestinationDatabase].[dbo].[DestTable_InMem] SELECT * FROM @InMem;
    GO

另請參閱
移轉至 In-Memory OLTP

原文出處:
跨資料庫查詢 - SQL Server | Microsoft Docs
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|