当前位置:首页 » 存储配置 » openquery存储过程

openquery存储过程

发布时间: 2022-07-13 23:49:50

sqlserver过程中使用openquery 修改oracle数据时,存储过程中断,oracle的值被改为null

过程内并非完全处于同一事务中, 所以执行一半断掉时,有部分生效.
如需避免此种情况, 需在过程前后增加事务, 保持原子性.

❷ 分布式链接查询该怎么做

参照我的整理贴
--远程连接操作
/******************************************************************************************************************************************************
--Tab表:
ID 自增列 Name
----------- ---------
1 a
2 b
3 c

--存储过程:

create proc P
as
select top 10 ID,Name from sysobjects

整理人:中国风(Roy)

日期:2008.06.06
******************************************************************************************************************************************************/

--远程链接服务器机器名:Roy;实例名:Roy\SQL2005DE;登陆名:sa;密码:Test2005;

--创建链接服务器
EXEC master.dbo.sp_addlinkedserver @server = N'ROY_LNK', @srvproct=N'ROY_LNK', @provider=N'SQLOLEDB', @datasrc=N'Roy\SQL2005DE'--SQL05可用SQLNCLI\SQLOLEDB
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ROY_LNK', @locallogin = NULL , @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'Test2005'
GO

--删除链接服务器
--exec sp_dropserver 'roy_lnk','droplogins'

--Select
select * from roy_lnk.test.dbo.Tab

--insert
insert roy_lnk.test.dbo.Tab(Name)--指定列
Values('d')

--update
update roy_lnk.test.dbo.Tab set Name='DD' where Name='d'

--delete
delete roy_lnk.test.dbo.Tab where Name='DD'

用openrowset:

--支持存储过程
select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005','test.dbo.p')a

--select
select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)a

--insert
insert openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)(Name)values('EE')

--update
update openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) set Name='EEE' where Name=N'EE'

--delete
delete openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) where Name=N'EEE'

用openquery:--支持存储过程

--支持存储过程
select * from openquery(roy_lnk, 'test.dbo.P')

--select
SELECT * FROM openquery(roy_lnk, 'SELECT * FROM test.dbo.tab')

--insert
insert openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') (Name) values('F')

--update
update openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') set Name='FF' where Name='F'

--delete不支持是根据 OLE DB 提供者的功能而定
--delete openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') where Name='FF'

用OPENDATASOURCE:

--支持存储过程
select * from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').'test.dbo.p'

--select
select * from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab

--insert
insert OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab(Name) values('H')

--update
update OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab set Name='HH' where Name='H'

--delete
delete OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab where Name='HH'

--与本机表数据对比时用别名
select * from roy_lnk.test.dbo.Tab a join tab b on a.ID=b.ID

❸ 解释一个数据库程序

OPENQUERY()对给定的链接服务器执行指定的传递查询.

语法:
OPENQUERY (linked_server ,'query')

linked_server :表示链接服务器名称的标识符。

query :在链接服务器中执行的查询字符串。

通俗地讲:你把这个括号里的当成一次先执行的查询。就拿你的语句为例子,
第一步:先在链接到“SERVER”上,执行'select * from Northwind.customers'查询,完成之后将结果返回。
第二步:在第一步中返回的结果内,执行“select *”的查询。假设第一步返回的结果是一个单位的所有成员。那么第二步就是把这所有成员的所有信息显示出来。可以把这里的“所有成员”当成一个类似于表的东东来理解。

❹ 将excel中的数据导入到数据库中的速度过慢,该怎么解决

用批量导入可能会快点,不用每次都打开数据库,execl.只要将所有的数据都放入一个liststring,然后再提交就好了。这样效率会高点。

❺ 如何处理无法启动分布式事务的问题

最后只能变换思路解决,增加一下本地的日志表,通过触发器往日志表中添加记录,然后通过job调用存储过程(执行openquery操作mysql)就一切OK了。各位网友提供的解决方案,应该是在MS SQL到MS SQL同步的分布式事务故障解决方案,MS SQL到MY SQL的同步只能另辟蹊径了。

❻ SQL SERVER中存储过程创建如下,但是执行报错,大伙来看看

'select rownum,tsl_budget_control_l_s.nextval from tsl_budget_control_actual_l where rownum < '@COUNT''
是不是少个单引号啊?
引号嵌套用的时候 ''表示一个单引号的。

❼ sql 语句 select * from openquery 使用问题

declare @day varchar(8)
declare @s varchar(200)

set @day='20080109'
set @s='select * from x_退货主表 where substring(退货单号,9,8)='+@day
select * from openquery([testserver],@s)

❽ 200分求一个EXCEL导入SQL的存储过程

示例
导入与追加
本文使用的示例 SQL 语句演示了“创建表”查询。该查询通过使用 SELECT...INTO...FROM 语法将 Excel 数据导入新的 SQL Server 表。如这些代码示例所示,在继续引用源对象和目标对象时,可以通过使用 INSERT INTO...SELECT...FROM 语法将这些语句转换成追加查询。

使用 DTS 或 SSIS
可以使用“SQL Server Data Transformation Services (DTS) 导入向导”或“SQL Server 导入和导出向导”将 Excel 数据导入到 SQL Server 表中。在逐步执行向导并选择 Excel 源表时,要记住附加美元符号 ($) 的 Excel 对象名称代表工作表(例如,Sheet1$),而没有美元符号的普通对象名称代表 Excel 指定的范围。

使用链接服务器
要简化查询,可以将 Excel 工作簿配置为 SQL Server 中的链接服务器。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
306397 (http://support.microsoft.com/kb/306397/EN-US/ ) 如何:结合 SQL Server 链接的服务器和分布式查询使用 Excel
下列代码将 Excel 链接服务器“EXCELLINK”上的 Customers 工作表数据导入新的名为 XLImport1 的 SQL Server 表:
SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]

还可以通过按照以下方式使用 OPENQUERY 以全通过方式对源数据执行查询:
SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
'SELECT * FROM [Customers$]')

使用分布式查询
如果不想将对 Excel 工作簿的永久连接配置为链接服务器,可以通过使用 OPENDATASOURCE 或 OPENROWSET 函数为特定目的导入数据。下列代码示例也能将 Excel Customers 工作表数据导入新的 SQL Server 表:
SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')

使用 ADO 和 SQLOLEDB
当通过使用 Microsoft OLE DB for SQL Server (SQLOLEDB) 在 ADO 应用程序中连接到 SQL Server 时,可以使用与“使用分布式查询” 一节中相同的“分布式查询”语法将 Excel 数据导入 SQL Server。

下列 Visual Basic 6.0 代码示例要求添加对 ActiveX 数据对象 (ADO) 的项目引用。此代码示例还演示了如何在 SQLOLEDB 连接上使用 OPENDATASOURCE 和 OPENROWSET。
Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;Data Source=<server>;" & _
"Initial Catalog=<database>;User ID=<user>;Password=<password>"

'Import by using OPENDATASOURCE.
strSQL = "SELECT * INTO XLImport6 FROM " & _
"OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
"'Data Source=C:\test\xltest.xls;" & _
"Extended Properties=Excel 8.0')...[Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and object name.
strSQL = "SELECT * INTO XLImport7 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:\test\xltest.xls', " & _
"[Customers$])"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and SELECT query.
strSQL = "SELECT * INTO XLImport8 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:\test\xltest.xls', " & _
"'SELECT * FROM [Customers$]')"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing

使用 ADO 和 Jet Provider
上一节中的示例使用 ADO 和 SQLOLEDB Provider 连接到从 Excel 到 SQL 导入的目标。也可以使用 OLE DB Provider for Jet 4.0 来连接到 Excel 源。

Jet 数据引擎可以通过使用具有三种不同格式的特殊语法来在 SQL 语句中引用外部数据库:
[Full path to Microsoft Access database].[Table Name]
[ISAM Name;ISAM Connection String].[Table Name]
[ODBC;ODBC Connection String].[Table Name]
本节使用第三种格式创建到目标 SQL Server 数据库的 ODBC 连接。可以使用 ODBC 数据源名称 (DSN) 或者 DSN-less 连接字符串:
DSN:
[odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
[odbc;Driver={SQL Server};Server=<server>;Database=<database>;
UID=<user>;PWD=<password>]

下列 Visual Basic 6.0 代码示例要求添加对 ADO 的项目引用。此代码示例演示了如何使用 Jet 4.0 Provider 通过 ADO 连接将 Excel 数据导入到 SQL Server。
Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\test\xltestt.xls;" & _
"Extended Properties=Excel 8.0"

'Import by using Jet Provider.
strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
"Server=<server>;Database=<database>;" & _
"UID=<user>;PWD=<password>].XLImport9 " & _
"FROM [Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing

也可以通过使用该语法(Jet Provider 支持)将 Excel 数据导入其他 Microsoft Access 数据库、索引顺序存取方法 (ISAM)(“desktop”)数据库或 ODBC 数据库。

回到顶端
疑难解答
记住附加美元符号 ($) 的 Excel 对象名称代表工作表(例如:Sheet1$),而普通对象名称代表 Excel 指定的范围。
在某些环境中,特别是用表名称取代 SELECT 查询指派 EXCEL 源数据时,目标 SQL Server 表中的列会按照字母顺序重排。有关 Jet Provider 中存在的这一问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
299484 (http://support.microsoft.com/kb/299484/EN-US/ ) PRB:使用 ADOX 检索 Access 表的列时,列按字母顺序排列
当 Jet Provider 确定一个 Excel 列包含了混合文本和数值数据时,Jet Provider 会选择“majority”数据类型并将不匹配的值以 NULL 形式返回。有关如何解决这个问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
194124 (http://support.microsoft.com/kb/194124/EN-US/ ) PRB:使用 DAO OpenRecordset 时 Excel 返回值为 NULL
回到顶端
参考有关如何将 Excel 用作数据源的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 257819 (http://suppo...有关如何将 Excel 用作数据源的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
257819 (http://support.microsoft.com/kb/257819/EN-US/ ) 如何:在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据
有关如何将数据传输到 Excel 中的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
295646 (http://support.microsoft.com/kb/295646/EN-US/ ) 如何:使用 ADO 将数据从 ADO 数据源传输到 Excel
247412 (http://support.microsoft.com/kb/247412/EN-US/ ) INFO:将数据从 Visual Basic 传输到 Excel 的方法
246335 (http://support.microsoft.com/kb/246335/EN-US/ ) 如何:使用“自动化”功能将数据从 ADO 记录集传输到 Excel
319951 (http://support.microsoft.com/kb/319951/EN-US/ ) 如何:通过 SQL Server 数据传输服务向 Excel 传送数据
306125 (http://support.microsoft.com/kb/306125/EN-US/ ) 如何:将数据从 Microsoft SQL Server 导入 Microsoft Excel

热点内容
db2数据库别名 发布:2024-10-08 08:19:02 浏览:239
如何更换安卓系统时钟 发布:2024-10-08 08:12:54 浏览:396
电脑创建服务器软件 发布:2024-10-08 08:12:47 浏览:476
如何防微信恶意找回密码 发布:2024-10-08 08:01:58 浏览:812
aspnet存储过程分页 发布:2024-10-08 08:01:47 浏览:460
王者安卓怎么拍高清视频教程 发布:2024-10-08 07:57:04 浏览:263
酒吧灯光编程 发布:2024-10-08 07:52:42 浏览:8
别克英朗买15哪个配置好 发布:2024-10-08 07:43:38 浏览:237
android安装sdk 发布:2024-10-08 07:42:41 浏览:328
qq空间音乐缓存 发布:2024-10-08 07:05:49 浏览:738