我想要添、查、删、改都和操作一个数据库一样。
比如我要在添加一条数据之前检查两个数据库中是否已经存在,如果不存在则添加到第二个数据库,如果存在则修改所在的数据库。
具体情况是这样的,我的服务商的数据库最大支持200M的数据库,而我的数据库现在马上就超过200M了,所以只能再开一个新数据库,但我还要对以前的数据进行检索和修改。新数据添加到第二个数据库。
程序早就写好了,不想做太大的改动,大家有什么好办法?
18 个解决方案
#1
例如表tb
--如果两个库不同机,需要先链接.然后按照如下方法.
if exists(select 1 from db1.dbo.tb where ...)
update tb set ... from db1.dbo.tb where ...
else
begin
if exists(select 1 from db2.dbo.tb where ...)
update tb set ... from db2.dbo.tb where ...
else
insert into db2.dbo.tb values(....)
end
--如果两个库不同机,需要先链接.然后按照如下方法.
if exists(select 1 from machine1.db1.dbo.tb where ...)
update tb set ... from machine1.db1.dbo.tb where ...
else
begin
if exists(select 1 from machine2.db2.dbo.tb where ...)
update tb set ... from machine2.db2.dbo.tb where ...
else
insert into machine2.db2.dbo.tb values(....)
end
不同服务器数据库之间的数据操作
--创建链接服务器
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 本地表
#2
不同服务器数据库之间的数据操作
--创建链接服务器
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 本地表
够强悍的....
#3
写instead of触发器
比如 在第一个数据库的表1上写个update触发器
create trigger tri_tb1
on tb1
instead of update
as
if exists(select 1 from tb1 where id=inserted.id)
update tb1 set name=inserted.name,code=inserted.code
where id=inserted.id
else
update db2.dbo.tb1 set name=inserted.name,code=inserted.code
where id=inserted.id
#4
你回答的非常好,真是太专业了,你就是专家中的专家,不过我还是有点没全明白,比如,我要对两个数据同时检索该如何做?
#5
如何将两个数据库的搜索结果同时显示在前台?
#6
什么意思?
SELECT * FROM A..A A INNER JOIN B..B B WHERE A.COL=B.COL
?
#7
这是软件的功能,不是数据库或SQL语句能做到的.帮顶.
#8
我到是想到了一个比较简单的方法,就是在删除或修改的时修先判断ID字段,多少ID以后的的以后的调用不同的数据库就行了。不过就是现在同时对两个数据库进行检索还是没明白,有现成的SQL吗?
#9
我在一楼就告诉你语句了.
#10
可能我说的不大明白,就是两个相同的数据库,名称字段都相同,就是内存不同,比如我要用like搜索关建字123,那么怎么能让它把两个数据库里包括123的内存全都显示出来。只要SQL语句那段
#11
#12
具体情况是这样的,我的服务商的数据库最大支持200M的数据库,而我的数据库现在马上就超过200M了,所以只能再开一个新数据库,但我还要对以前的数据进行检索和修改。新数据添加到第二个数据库。
两个数据库的结构一样吗?
两个数据库的结构一样吗?
SELECT * FROM
(SELECT * FROM A..A UNION ALL SELECT * FROM B..B)AS T
#13
SELECT * FROM
(SELECT * FROM A..A UNION ALL SELECT * FROM B..B)AS T WHERE COL LIKE '%123%'
#14
uping uping
#15
select * from db1.dbo.tb where col like '%123%'
union all
select * from db2.dbo.tb where col like '%123%'
select * from db1.dbo.tb where charindex('123',col) > 0
union all
select * from db2.dbo.tb where charindex('123',col) > 0
#16
假如你的两个数据库分别为db1和db2
首先看你的两个数据库是否在一台机器上:
1.若两个库在一台机器上,要在连接db2的查询分析器中查询db1中的数据,像这样
select * from db1.dbo.表名
2.若两个库不在同一台机器上,参见1楼和2楼,不明白的系统存储过程,请查询相关的帮助。
若再不明白,可以分别连接两个数据库,进行检索和插入、修改数据
首先看你的两个数据库是否在一台机器上:
1.若两个库在一台机器上,要在连接db2的查询分析器中查询db1中的数据,像这样
select * from db1.dbo.表名
2.若两个库不在同一台机器上,参见1楼和2楼,不明白的系统存储过程,请查询相关的帮助。
若再不明白,可以分别连接两个数据库,进行检索和插入、修改数据
#17
我在研究研究吧。
数据库A 和数据库B
表名都是table
每个表有两个字段id和NAME
库A 表table
id name
1 846412365
2 sdfds123sdf
3 sdfsd
库B 表table
id name
4 123
5 sdfsd
现在我要找出库A和库B里所有包括123的信息该怎么写?
select id,name form table where name like '%123%'
就是类似这样的,该怎么写才正确?是否需要先把两个数据库全都打开再操作。
数据库A 和数据库B
表名都是table
每个表有两个字段id和NAME
库A 表table
id name
1 846412365
2 sdfds123sdf
3 sdfsd
库B 表table
id name
4 123
5 sdfsd
现在我要找出库A和库B里所有包括123的信息该怎么写?
select id,name form table where name like '%123%'
就是类似这样的,该怎么写才正确?是否需要先把两个数据库全都打开再操作。
#18
明白了,这还有个一样的帖子,你们去一下把分领了吧。
http://topic.csdn.net/u/20100419/20/edadcbdd-3873-46b2-b896-da1ea635c04c.html?seed=1208532310&r=64795877#r_64795877
http://topic.csdn.net/u/20100419/20/edadcbdd-3873-46b2-b896-da1ea635c04c.html?seed=1208532310&r=64795877#r_64795877
#1
例如表tb
--如果两个库不同机,需要先链接.然后按照如下方法.
if exists(select 1 from db1.dbo.tb where ...)
update tb set ... from db1.dbo.tb where ...
else
begin
if exists(select 1 from db2.dbo.tb where ...)
update tb set ... from db2.dbo.tb where ...
else
insert into db2.dbo.tb values(....)
end
--如果两个库不同机,需要先链接.然后按照如下方法.
if exists(select 1 from machine1.db1.dbo.tb where ...)
update tb set ... from machine1.db1.dbo.tb where ...
else
begin
if exists(select 1 from machine2.db2.dbo.tb where ...)
update tb set ... from machine2.db2.dbo.tb where ...
else
insert into machine2.db2.dbo.tb values(....)
end
不同服务器数据库之间的数据操作
--创建链接服务器
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 本地表
#2
不同服务器数据库之间的数据操作
--创建链接服务器
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 本地表
够强悍的....
#3
写instead of触发器
比如 在第一个数据库的表1上写个update触发器
create trigger tri_tb1
on tb1
instead of update
as
if exists(select 1 from tb1 where id=inserted.id)
update tb1 set name=inserted.name,code=inserted.code
where id=inserted.id
else
update db2.dbo.tb1 set name=inserted.name,code=inserted.code
where id=inserted.id
#4
你回答的非常好,真是太专业了,你就是专家中的专家,不过我还是有点没全明白,比如,我要对两个数据同时检索该如何做?
#5
如何将两个数据库的搜索结果同时显示在前台?
#6
什么意思?
SELECT * FROM A..A A INNER JOIN B..B B WHERE A.COL=B.COL
?
#7
这是软件的功能,不是数据库或SQL语句能做到的.帮顶.
#8
我到是想到了一个比较简单的方法,就是在删除或修改的时修先判断ID字段,多少ID以后的的以后的调用不同的数据库就行了。不过就是现在同时对两个数据库进行检索还是没明白,有现成的SQL吗?
#9
我在一楼就告诉你语句了.
#10
可能我说的不大明白,就是两个相同的数据库,名称字段都相同,就是内存不同,比如我要用like搜索关建字123,那么怎么能让它把两个数据库里包括123的内存全都显示出来。只要SQL语句那段
#11
#12
具体情况是这样的,我的服务商的数据库最大支持200M的数据库,而我的数据库现在马上就超过200M了,所以只能再开一个新数据库,但我还要对以前的数据进行检索和修改。新数据添加到第二个数据库。
两个数据库的结构一样吗?
两个数据库的结构一样吗?
SELECT * FROM
(SELECT * FROM A..A UNION ALL SELECT * FROM B..B)AS T
#13
SELECT * FROM
(SELECT * FROM A..A UNION ALL SELECT * FROM B..B)AS T WHERE COL LIKE '%123%'
#14
uping uping
#15
select * from db1.dbo.tb where col like '%123%'
union all
select * from db2.dbo.tb where col like '%123%'
select * from db1.dbo.tb where charindex('123',col) > 0
union all
select * from db2.dbo.tb where charindex('123',col) > 0
#16
假如你的两个数据库分别为db1和db2
首先看你的两个数据库是否在一台机器上:
1.若两个库在一台机器上,要在连接db2的查询分析器中查询db1中的数据,像这样
select * from db1.dbo.表名
2.若两个库不在同一台机器上,参见1楼和2楼,不明白的系统存储过程,请查询相关的帮助。
若再不明白,可以分别连接两个数据库,进行检索和插入、修改数据
首先看你的两个数据库是否在一台机器上:
1.若两个库在一台机器上,要在连接db2的查询分析器中查询db1中的数据,像这样
select * from db1.dbo.表名
2.若两个库不在同一台机器上,参见1楼和2楼,不明白的系统存储过程,请查询相关的帮助。
若再不明白,可以分别连接两个数据库,进行检索和插入、修改数据
#17
我在研究研究吧。
数据库A 和数据库B
表名都是table
每个表有两个字段id和NAME
库A 表table
id name
1 846412365
2 sdfds123sdf
3 sdfsd
库B 表table
id name
4 123
5 sdfsd
现在我要找出库A和库B里所有包括123的信息该怎么写?
select id,name form table where name like '%123%'
就是类似这样的,该怎么写才正确?是否需要先把两个数据库全都打开再操作。
数据库A 和数据库B
表名都是table
每个表有两个字段id和NAME
库A 表table
id name
1 846412365
2 sdfds123sdf
3 sdfsd
库B 表table
id name
4 123
5 sdfsd
现在我要找出库A和库B里所有包括123的信息该怎么写?
select id,name form table where name like '%123%'
就是类似这样的,该怎么写才正确?是否需要先把两个数据库全都打开再操作。
#18
明白了,这还有个一样的帖子,你们去一下把分领了吧。
http://topic.csdn.net/u/20100419/20/edadcbdd-3873-46b2-b896-da1ea635c04c.html?seed=1208532310&r=64795877#r_64795877
http://topic.csdn.net/u/20100419/20/edadcbdd-3873-46b2-b896-da1ea635c04c.html?seed=1208532310&r=64795877#r_64795877