當前位置:首頁 » 存儲配置 » 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

熱點內容
湖南回收伺服器主板雲主機 發布:2024-10-08 06:12:59 瀏覽:807
psv視頻腳本 發布:2024-10-08 06:12:13 瀏覽:420
文件夾菜單欄 發布:2024-10-08 05:46:23 瀏覽:491
壓縮機選型手冊 發布:2024-10-08 05:24:37 瀏覽:621
java主機名 發布:2024-10-08 05:12:55 瀏覽:118
華意壓縮待遇 發布:2024-10-08 05:04:07 瀏覽:466
jsp上傳圖片存到資料庫 發布:2024-10-08 05:04:06 瀏覽:74
分卷壓縮解壓速度 發布:2024-10-08 04:45:16 瀏覽:847
冰雪單職業輔助哪個好安卓 發布:2024-10-08 04:40:06 瀏覽:663
iqz3哪個配置好一點 發布:2024-10-08 04:34:07 瀏覽:763