日期:2014-05-20  浏览次数:21046 次

关于从两个数据库不同的表中读取数据问题???
如下SQL语句:
SELECT   *   FROM   Global_User   WHERE   CompanyID   =   1

Global_User表是在数据库1里的。

再从上面查询的结果里再执行下面的语句:

  and   Global_User.UserID   not   in   (select   UserID   from   TranTX_User   )
而TranTX_User是在数据库2里。

怎么才能很好的执行上面的操作呀?

------解决方案--------------------
先从TranTX_User取出数据..再取Global_User数据..

for example:

string strSql = "SELECT * FROM Global_User WHERE CompanyID = 1 and UserID not in ( ";
SqlConnection con=new SqlConnection ( "连接字符串 ");
SqlCommand cmd = new SqlCommand( "select UserID from TranTX_User ", con);
con.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
//组织字符串
strSql += Convert.ToInt32(sdr[0]);
strSql += ", ";
}
sdr.Close();
con.Close();
strSql = strSql.Substring(0, strSql.Length - 1) + ") ";
//取出Global_User数据,比如把数据存储到DataSet中
SqlDataAdapter sda = new SqlDataAdapter(strSql, con);
DataSet ds = new DataSet();
sda.Fill(ds, "UserTable ");


------解决方案--------------------
上面这位兄弟,你这样写SQL语句,看上去可行,但是你怎么数据库连接呀,
就是怎么去写: "server=localhost;database=111;uid=sa;pwd=; "
"server=localhost;database=222;uid=sa;pwd=; "
conn.open();

这里有两个数据库连接,怎么打开数据库连接呀?难道写两个conn.open();

==================================================================

一个连接就可以了啊

你在查询分析器里做一下,如果能通过的话程序里也一定能通过。

------解决方案--------------------

兄弟看看这样行不?我试过,应该可以滴!
SELECT * FROM Global_User WHERE CompanyID = 1
and Global_User.UserID not in (select UserID from 数据库2..TranTX_User )

------解决方案--------------------
创建dblink分为两个步骤:

1.建立本地服务名

2.-- Create database link
create database link TEST.US.ORACLE.COM
connect to user identified by pwd
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
) ';

曾经参考语句:

CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;

数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样

数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;

查询远端数据库里的表
SELECT …… FROM 表名@数据库链接名;


附带说下同义词创建:

CREATE SYNONYM同义词名FOR 表名;
CREATE SYNONYM同义词名FOR 表名@数据库链接名;
------解决方案--------------------
加上数据库名就好了
SELECT * FROM database.dbo.Global_User WHERE CompanyID = 1 and database.dbo.Global_User.UserID not in (select UserID from database2.dbo.TranTX_User )


------解决方案--------------------
改了下,已测试过了,再不对你就看看你数据库是不是字段名对不上了
SELECT * FROM database.dbo.Global_User WHERE CompanyID = 1 and UserID not in (select UserID from database2.dbo.TranTX_User )