首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新到Openrowset SQL SERVER 2008

更新到Openrowset SQL SERVER 2008
EN

Stack Overflow用户
提问于 2013-09-06 17:11:28
回答 3查看 21.4K关注 0票数 5

我正在尝试从本地查询对远程表执行更新操作。很明显,我知道它应该和OPENROWSET一起使用,但是我不知道怎么做。

我知道您可以在OPENROWSET中插入这样的操作:

代码语言:javascript
复制
 set @cadsql = convert(varchar(max),
  'insert into openrowset(''SQLOLEDB'','''+@cadcon+''','+@bd+'.ctoxtractor.lm_vehiculos) ' + char(13) + 
  '           (cuenta,corporativo,economico,ctatipotractor,sctatipotractor,ultcambio,ciausu,usuario,estatusoper) ' + char(13) + 
  'select 423,fv.vehic,fv.numeco,9802,0,getdate(),0,''ADMIN'',fv.estatusoper ' + char(13) + 
  'from ficvehic fv ' + char(13) + 
  'order by fv.vehic ')

 exec (@cadsql) 

或者我可以做这样的选择:

代码语言:javascript
复制
SET @cadsql = 'SELECT * FROM OPENROWSET(''sqloledb'',''driver=sql server;server='+@server+';database='+ @database +';uid='+@user+';pwd='+@password+''',' +
'''SELECT Column1, column2,...  
   FROM table'')'

INSERT INTO another_table
exec (@cadsql)

但我还没有想出一个更新的解决方案。这有可能吗?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2013-09-17 14:43:11

这是语法:

代码语言:javascript
复制
OPENROWSET 
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password' 
   | 'provider_string' } 
   , {   [ catalog. ] [ schema. ] object 
       | 'query' 
     } 
   | BULK 'data_file' , 
       { FORMATFILE = 'format_file_path' [ <bulk_options> ]
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
} ) 

<bulk_options> ::=
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] 
   [ , ERRORFILE = 'file_name' ]
   [ , FIRSTROW = first_row ] 
   [ , LASTROW = last_row ] 
   [ , MAXERRORS = maximum_errors ] 
   [ , ROWS_PER_BATCH = rows_per_batch ]
   [ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ]

在这里你可以得到更多的信息

http://technet.microsoft.com/es-es/library/ms190312.aspx

票数 2
EN

Stack Overflow用户

发布于 2013-09-17 13:39:16

OPENROWSET函数也可以作为INSERT、UPDATE或DELETE语句的目标表引用,但这取决于OLE DB提供程序的功能。尽管查询可能返回多个结果集,但OPENROWSET只返回第一个结果集。

只有当DisallowAdhocAccess注册表选项显式设置为0时,OPENROWSET才能用于从OLE DB数据源访问远程数据。当未设置此选项时,默认行为不允许临时访问。

OPENROWSET不接受其参数的变量。

开放功能的语法:

代码语言:javascript
复制
OPENROWSET ( 'provider_name' 
    , { 'datasource' ; 'user_id' ; 'password'
        | 'provider_string' } 
    , { [ catalog. ] [ schema. ] object
        | 'query' }   )

provider_name是一个字符串,表示注册表中指定的OLE DB提供程序的友好名称。它没有默认值。

datasource是对应于特定OLE DB数据源的字符串常量。

userid是一个字符串常量,它是传递给指定的OLE DB提供程序的用户名。

密码是一个特定于提供程序的连接字符串,作为DBPROP_INIT_PROVIDERSTRING属性传入,以初始化OLE DB提供程序。

目录是指定对象所在的目录或数据库的名称。

架构是指定对象的架构或对象所有者的名称。

对象是唯一标识要操作的对象的对象名称。

查询是由提供程序发送和执行的字符串常量。

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 01:36:01

更新..。看这里(最后一页)。我不知道这是否行得通,但似乎有道理.

http://www.sql-server-performance.com/forum/threads/how-to-update-using-openrowset.10275/

我今天工作的时候,看看能不能把这件事做好。我有几个测试星展可以玩..。

代码语言:javascript
复制
update t set t.col_Name='1' FROM OPENROWSET('SQLOLEDB','ServerName';'UserName';'Pwd','select * from TableName') t

HTH,

肯特

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18663077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档