文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>openquery的一地鸡毛

openquery的一地鸡毛

时间:2010-12-02  来源:屠龙解牛

  基本格式:openquery(linkservername,'otherDBsqlstring')

  linkeservername 可以在SqlServer中定义,otherDBsqlstring 必须符合异构数据库的语法格式。

  linkserver添加如下:  

    

 

  也可以:EXEC master.dbo.sp_addlinkedserver @server = N'uchome', @srvproduct=N'MYSQL', @provider=N'MSDASQL',

@provstr=N'DRIVER={MySQL ODBC 5.1 Driver};SERVER=yourserver;PORT=yourport;DATABASE=urdb;USER=user;PASSWORD=urpasword;STMT=set names gb2312;OPTION=2563'

这是mysql odbc的设置。OPTION 选项的设置很有意思,是一些素数的和,每个素数代表一个选项,而这个和只能分解成一种结果,以后有机会摸摸这种算法。

笔者在实践中遇到高版本odbc不兼容mysql的char,text类型,会自动截取空格,导致返回长度不一致,网上搜了下有人只好把odbc装回低版本,其实是微软在高版本中默认如此,但是多出来一个设置,改下odbc设置就好了。

      SUID操作

    其他不提,有一点注意。传入linkserver的异构数据库的dml语句必须是字符串,这就导致不能将参数传入,比如sp中就不是很方便。解决的方法有二:

其一:直接在传入之前拼好。比如在C#中将sql拼好,再执行ado.net操作;

其二:在sp中拼sql字符串,再执行。如:

    set @sql ='update openquery([Uchome],''select id,uid,code from uchome_dianpu_relation where uid = '+ cast(@site_uid as varchar)+''') set code ='''+ @code+''''

           exec (@sql)

需要注意,执行exec (@sql)又开了一个新的进程,与sp的进程不同。insert,update 均要如此操作,将where条件放进括号里面,select,delete则无此限制。

 

 

相关阅读 更多 +
排行榜 更多 +
边境检察最后区域手机版下载

边境检察最后区域手机版下载

角色扮演 下载
酋长你别跑手游下载

酋长你别跑手游下载

休闲益智 下载
心动漫画app下载官方版

心动漫画app下载官方版

浏览阅读 下载