我买了二个SQL空间,想用一个来做备用,当A服务器出问题了,我可以用用B服务器。(注意:我没有SA的权限,只有那个库的所有权)
我的网页只有一个表是动态的,我的想法是做一个存储过程把A服务器那个表的特定数据导到B服务器(表结构是一样的),我再用网页定来刷新来调用这个存储过程表结构
t_id(主键) 代理ID 用户名 商品类 商品名 折扣 金额
1 20 AAA BBB CCC 0.5 200
2 20 WWA XXX CEE 1.3 70.8
3 20 WWA XXX CEE 9 70
......比如B服务器的表 t_id 最大等于2时,那么就只要复制A服务器 t_id>2 的数据(也就是是B服务器那个表是增量的)。没学过MSSQL,这个需求又比较特殊,请各位大哥给一个完整代码并写一下注释。3Q
我的网页只有一个表是动态的,我的想法是做一个存储过程把A服务器那个表的特定数据导到B服务器(表结构是一样的),我再用网页定来刷新来调用这个存储过程表结构
t_id(主键) 代理ID 用户名 商品类 商品名 折扣 金额
1 20 AAA BBB CCC 0.5 200
2 20 WWA XXX CEE 1.3 70.8
3 20 WWA XXX CEE 9 70
......比如B服务器的表 t_id 最大等于2时,那么就只要复制A服务器 t_id>2 的数据(也就是是B服务器那个表是增量的)。没学过MSSQL,这个需求又比较特殊,请各位大哥给一个完整代码并写一下注释。3Q
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例
select * from ITSV.数据库名.dbo.表名 --导入示例
select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset --查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表 --更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
--备份数据当前数据库的所有内容
exec p_backupdatabase
--备份当前数据库的指定表
exec p_backupdatabase @tblist='tb,tb1,tb2'
--*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_BackupDataBase]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_BackupDataBase]
GOCREATE PROCEDURE p_BackupDataBase
@s_dbname sysname='', --要备份的数据库名,如果不指定,则备份当前数据库
@d_dbname sysname='', --备份生成的数据库名,如果不指定,则为:@s_dbname+'_bak'
@tblist varchar(8000)='' --要备份的表名列表,如果不指定,则表示所有用户表
AS
declare @sql varchar(8000),@err_msg varchar(1000)--参数检测
if isnull(@s_dbname,'')='' set @s_dbname=db_name()
if isnull(@d_dbname,'')='' set @d_dbname=@s_dbname+'_bak'
if exists(select 1 from master..sysdatabases where name=@d_dbname)
begin
set @err_msg='备份的数据库 ['+@d_dbname+'] 已经存在!'
goto lb_exit
end
if not exists(select 1 from master..sysdatabases where name=@s_dbname)
begin
set @err_msg='要备份的数据库 ['+@d_dbname+'] 不存在!'
goto lb_exit
end--创建备份的数据库
set @sql='create database ['+@d_dbname+']'
exec(@sql)--备份表
declare @tbname sysname
set @sql='declare tb cursor for
select name from ['+@s_dbname+']..sysobjects
where status>0 and xtype=''U'''
+case isnull(@tblist,'') when '' then ''
else ' and name in('''+replace(@tblist,',',''',''')+''')' end
exec(@sql)
open tb
fetch next from tb into @tbname
while @@fetch_status=0
begin
set @sql='select * into ['+@d_dbname+']..['+@tbname
+'] from ['+@s_dbname+']..['+@tbname+']'
exec(@sql)
fetch next from tb into @tbname
end
close tb
deallocate tblb_exit:
if @err_msg<>'' raiserror(@err_msg,1,16)
go
USE pubs
GO
SELECT a.*
FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',
'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a
GO
这个效率相对比较好点
而且可以导该表全部数据
insert into openrowset( 'Microsoft.Jet.OLEDB.4.0 ', 'D:\Workplace\db1.mdb '; 'admin '; ' ',all_site_conter) (字段1,字段2,..) select 字段1,字段2,.. from [all_site_conter]