RENHU\A、CHINA-E931FACA9\BSalesDB、登入 xqls、資料表 SalesHistorySaleID 範圍分片:
SaleID < 20000,Region = 'West'SaleID >= 20000,Region = 'East'dpv_SalesHistory 分散式視圖(UNION ALL)

-- 1. 建立資料庫與選項
CREATE DATABASE SalesDB;
EXECUTE sp_serveroption @server='RENHU\A', @optname='lazy schema validation', @optvalue='true';
-- 2. 登入與使用者
CREATE LOGIN xqls WITH PASSWORD = 'wisdom317';
GO
USE SalesDB;
CREATE USER xqls FROM LOGIN xqls;
GO
-- 3. 連結到 B
EXECUTE sp_addlinkedserver 'CHINA-E931FACA9\B', 'SQL Server';
EXEC sp_addlinkedsrvlogin 'CHINA-E931FACA9\B', 'false', NULL, 'xqls', 'wisdom317';
GO
-- 4. 建立分片表(含 CHECK 約束)
IF OBJECT_ID('SalesHistory','U') > 0 DROP TABLE SalesHistory;
GO
CREATE TABLE SalesHistory (
SaleID INT PRIMARY KEY,
Product VARCHAR(30) NOT NULL,
SaleDate DATETIME,
SalePrice MONEY,
Region VARCHAR(5) NOT NULL,
CONSTRAINT chk_Region CHECK (SaleID < 20000)
);
GO
-- 5. 測試資料(West,ID 1~6000)
DECLARE @i SMALLINT, @Region VARCHAR(5);
SET @i = 1; SET @Region = 'West';
WHILE @i <= 6000
BEGIN
INSERT INTO SalesHistory VALUES (@i, 'Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i+57), @Region); SET @i += 1;
INSERT INTO SalesHistory VALUES (@i, 'BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i+13), @Region); SET @i += 1;
INSERT INTO SalesHistory VALUES (@i, 'PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i+29), @Region); SET @i += 1;
END
GO
-- 6. 權限
GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON SalesHistory TO xqls;
GO
-- 7. 分散式視圖
CREATE VIEW dpv_SalesHistory AS
SELECT SaleID, Product, Region, SaleDate, SalePrice FROM SalesDB.dbo.SalesHistory
UNION ALL
SELECT SaleID, Product, Region, SaleDate, SalePrice FROM [CHINA-E931FACA9\B].SalesDB.dbo.SalesHistory;
GO
-- 8. 測試
SELECT * FROM dpv_SalesHistory;
CREATE DATABASE SalesDB;
EXECUTE sp_serveroption @server='CHINA-E931FACA9\B', @optname='lazy schema validation', @optvalue='true';
CREATE LOGIN xqls WITH PASSWORD = 'wisdom317';
GO
USE SalesDB;
CREATE USER xqls FROM LOGIN xqls;
GO
EXECUTE sp_addlinkedserver 'RENHU\A', 'SQL Server';
EXEC sp_addlinkedsrvlogin 'RENHU\A', 'false', NULL, 'xqls', 'wisdom317';
GO
IF OBJECT_ID('SalesHistory','U') > 0 DROP TABLE SalesHistory;
GO
CREATE TABLE SalesHistory (
SaleID INT PRIMARY KEY,
Product VARCHAR(30) NOT NULL,
SaleDate DATETIME,
SalePrice MONEY,
Region VARCHAR(5) NOT NULL,
CONSTRAINT chk_Region CHECK (SaleID >= 20000)
);
GO
DECLARE @i SMALLINT, @Region VARCHAR(5);
SET @i = 20000; SET @Region = 'East';
WHILE @i <= 26000
BEGIN
INSERT INTO SalesHistory VALUES (@i, 'Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i+57), @Region); SET @i += 1;
INSERT INTO SalesHistory VALUES (@i, 'BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i+13), @Region); SET @i += 1;
INSERT INTO SalesHistory VALUES (@i, 'PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i+29), @Region); SET @i += 1;
END
GO
GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON SalesHistory TO xqls;
GO
CREATE VIEW dpv_SalesHistory AS
SELECT SaleID, Product, Region, SaleDate, SalePrice FROM SalesDB.dbo.SalesHistory
UNION ALL
SELECT SaleID, Product, Region, SaleDate, SalePrice FROM [RENHU\A].SalesDB.dbo.SalesHistory;
GO
SELECT * FROM dpv_SalesHistory;
lazy schema validation:延遲結構描述驗證,提升分散式查詢效能CHECK 約束:查詢最佳化器利用約束進行分區裁剪,只存取相關節點UNION ALL 視圖:提供單一查詢入口,應用層無感知