linkedserverdemo10.sql

来自「T-SQL示例大全」· SQL 代码 · 共 89 行

SQL
89
字号
/* 文件名称: LinkedServerDemo10.sql */
USE master
GO

-- 连接服务器 AccessXP 的数据来源是一个 Access 数据库
EXEC sp_addlinkedserver 
   @server = 'AccessXP', 
   @srvproduct = N'Access 2002',
   @provider = N'Microsoft.Jet.OLEDB.4.0', 
   @datasrc = N'C:\T-SQL\Database\北风贸易公司.mdb'
GO

-- 表示如果您采用 SQL Server 的帐户验证连接至 SQL Server, 则以
-- 用户名称 Admin 且没有密码登录连接服务器 AccessXP 。
EXEC sp_addlinkedsrvlogin 'AccessXP','false',NULL,'Admin',NULL
GO

-- 连接服务器 MyLinkedServer1 的数据来源是网络名称为 TPSERVER 的 SQL Server
-- 此连接服务器已指定当前数据库
EXEC sp_addlinkedserver @server = 'MyLinkedServer1',
                                        @srvproduct = N'',
                                        @provider = N'SQLOLEDB',
                                        @datasrc = N'TPSERVER',
                                        @catalog = '北风贸易'
GO

-- 连接服务器 MyLinkedServer2 的数据来源是网络名称为 W2KSTATION1 的 SQL Server
-- 此连接服务器已指定当前数据库
EXEC sp_addlinkedserver @server = 'MyLinkedServer2',
                                        @srvproduct = N'',
                                        @provider = N'SQLOLEDB',
                                        @datasrc = N'W2KSTATION1',
                                        @catalog = '北风贸易'
GO

USE 北风贸易
GO

if exists (select * from dbo.sysobjects where id = object_id(N'我的数据表')
   and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE 我的数据表
GO

-- 将 OPENQUERY() 函数返回从各个远程不同种类的数据来源
-- 所返回的数据加以合并然后存入一个新数据表中
SELECT * INTO 我的数据表
  FROM OPENQUERY(AccessXP,
              'SELECT 姓名,DateDiff("yyyy",出生日期,Date()) AS 年龄,地址
               FROM 章立民工作室 WHERE 地址 LIKE ''%桃园县%''')
UNION ALL
SELECT * FROM OPENQUERY(MyLinkedServer1,
               'SELECT 姓名,年龄 = DATEDIFF(yy,出生日期,GETDATE()),地址
                FROM 章立民工作室 WHERE 地址 LIKE ''%台中市%''')
UNION ALL
SELECT * FROM OPENQUERY(MyLinkedServer2,
               'SELECT 姓名,年龄 = DATEDIFF(yy,出生日期,GETDATE()),地址
               FROM 章立民工作室 WHERE 地址 LIKE ''%高雄市%''')
ORDER BY 2 DESC
GO

SELECT * FROM 我的数据表
GO

-- 将 OPENQUERY() 函数返回从各个远程不同种类的数据来源
-- 所返回的数据加以连接以便取得相关联的数据
SELECT a.客户编号, a.公司名称,
           Year(b.订单日期) AS 年份,
           Month(b.订单日期) AS 月份,
           Sum(c.单价*c.数量*(1-c.折扣)) AS 小计
FROM OPENQUERY(AccessXP,'SELECT * FROM 客户') a 
            INNER JOIN
            OPENQUERY(MyLinkedServer1,'SELECT * FROM 订货主档') b
            ON a.客户编号 = b.客户编号
            INNER JOIN
            OPENQUERY(MyLinkedServer2,'SELECT * FROM 订货明细') c
            ON b.订单号码 = c.订单号码 
GROUP BY a.客户编号, a.公司名称, Year(b.订单日期), Month(b.订单日期)
ORDER BY a.公司名称, Year(b.订单日期), Month(b.订单日期)

GO

-- 删除连接服务器。
-- 再次提醒您,于正常状况下,连接服务器不会立即删除,
-- 而会持续使用,直到您真的不需要再使用为止。
EXEC sp_dropserver 'AccessXP','droplogins'
EXEC sp_dropserver 'MyLinkedServer1'
EXEC sp_dropserver 'MyLinkedServer2'
GO

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?