我正在尝试从本地查询对远程表执行更新操作。很明显,我知道它应该和OPENROWSET一起使用,但是我不知道怎么做。
我知道您可以在OPENROWSET中插入这样的操作:
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) 或者我可以做这样的选择:
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)但我还没有想出一个更新的解决方案。这有可能吗?
提前感谢!
发布于 2013-09-17 14:43:11
这是语法:
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
发布于 2013-09-17 13:39:16
OPENROWSET函数也可以作为INSERT、UPDATE或DELETE语句的目标表引用,但这取决于OLE DB提供程序的功能。尽管查询可能返回多个结果集,但OPENROWSET只返回第一个结果集。
只有当DisallowAdhocAccess注册表选项显式设置为0时,OPENROWSET才能用于从OLE DB数据源访问远程数据。当未设置此选项时,默认行为不允许临时访问。
OPENROWSET不接受其参数的变量。
开放功能的语法:
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提供程序。
目录是指定对象所在的目录或数据库的名称。
架构是指定对象的架构或对象所有者的名称。
对象是唯一标识要操作的对象的对象名称。
查询是由提供程序发送和执行的字符串常量。
发布于 2013-09-10 01:36:01
更新..。看这里(最后一页)。我不知道这是否行得通,但似乎有道理.
http://www.sql-server-performance.com/forum/threads/how-to-update-using-openrowset.10275/
我今天工作的时候,看看能不能把这件事做好。我有几个测试星展可以玩..。
update t set t.col_Name='1' FROM OPENROWSET('SQLOLEDB','ServerName';'UserName';'Pwd','select * from TableName') tHTH,
肯特
https://stackoverflow.com/questions/18663077
复制相似问题