程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server快速導入數據分享

SQL Server快速導入數據分享

編輯:關於SqlServer
 

SQL Server快速導入數據,可以嘗試的方法如下:CTE、OpenRowSet/OpenDataSource、BULK INSERT、bcp、Shell

下面依次介紹這幾種辦法。

1.CTE

首先,我們看看什麼是CTE。公用表表達式(Common Table Expression)是SQL SERVER 2005版本之後引入的一個特性。CTE可以看作是一個臨時的結果集,可以在接下來的一個SELECT,INSERT,UPDATE,DELETE,MERGE語句中被多次引用。使用公用表達式可以讓語句更加清晰簡練。CTE 與派生表類似,具體表現在不存儲為對象,並且只在查詢期間有效。與派生表的不同之處在於,CTE 可自引用,還可在同一查詢中引用多次。
更多請點擊:technet

示例如下:

USE AdventureWorks2008R2;
GO
-- Define the CTE expression name and column list.
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
AS
-- Define the CTE query.
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
    INTO #temp1
    FROM Sales.SalesOrderHeader
    WHERE SalesPersonID IS NOT NULL
)
-- Define the outer query referencing the CTE name.
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
INTO #temp2
FROM Sales_CTE
GROUP BY SalesYear, SalesPersonID
ORDER BY SalesPersonID, SalesYear;
GO

2.OpenRowSet/OpenDataSource

OpenRowSet和OpenDataSource都可以訪問遠程的數據庫,但具體表現上,二者還是有差別的。OpenDataSource 不使用鏈接的服務器名,而提供特殊的連接信息,並將其作為四部分對象名的一部分。 而OpenRowSet 包含訪問 OLE DB 數據源中的遠程數據所需的全部連接信息。當訪問鏈接服務器中的表時,這種方法是一種替代方法,並且是一種使用 OLE DB 連接並訪問遠程數據的一次性的、特殊的方法。可以在查詢的 FROM 子句中像引用表那樣引用 OpenRowSet 函數。依據 OLE DB 提供程序的能力,還可以將 而OpenRowSet 函數引用為 INSERT、UPDATE 或 DELETE 語句的目標表。盡管查詢可能返回多個結果集,然而OPENROWSET 只返回第一個。更多請點擊:technet

示例如下:

--啟用Ad Hoc Distributed Queries
EXEC SP_CONFIGURE 'show advanced options',1
RECONFIGURE
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',1
RECONFIGURE
--使用OpenDataSource導入數據
INSERT INTO IMP_DATA.dbo.t_goods
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.12.0',
'Data Source="E:/Report1.txt";User ID=Admin;Password=;
Extended properties=Excel 12.0')...[Sheet1$]
--使用完畢後,切記關閉它,因為這是一個安全隱患
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',0
RECONFIGURE
EXEC SP_CONFIGURE  'show advanced options',0
RECONFIGURE

3.BULK INSERT

BULK INSERT允許用戶以其指定的格式將數據文件導入到數據庫表或視圖中。更多請點擊:technet

示例如下:

--定義導入目的和導入源
BULK INSERT IMP_DATA.dbo.t_goods FROM 'E:/Report1.txt'
WITH (
  --列分隔符
  FIELDTERMINATOR = ',',
  --行分隔符
  ROWTERMINATOR = '\n'
)

4.bcp

bcp 實用工具可以在 Microsoft SQL Server 實例和用戶指定格式的數據文件間大容量復制數據。 使用 bcp 實用工具可以將大量新行導入 SQL Server 表,或將表數據導出到數據文件。 除非與 queryout 選項一起使用,否則使用該實用工具不需要了解 Transact-SQL 知識。 若要將數據導入表中,必須使用為該表創建的格式文件,或者必須了解表的結構以及對於該表中的列有效的數據類型。
更多請點擊:technet

示例如下:

--打開高級選項
EXEC SP_CONFIGURE 'show advanced options', 1;
RECONFIGURE;
--啟用執行CMD命令
EXEC SP_CONFIGURE 'xp_cmdshell', 1;
RECONFIGURE;

--指定導入目的和導入源
EXEC master..xp_cmdshell 'BCP IMP_DATA.dbo.t_goods in E:\report.txt -c -T'

5.Shell

Shell通過拼接插入字符串的方法非常靈活,並且出錯較少,但插入的內容包含很多非法字符的話會很惱。可以參考以前寫的文章:缺乏導入數據權限,SQL Server創建測試數據

最後,貼張前段時間做的圖,導入數據總結:

導入數據總結

–EOF–

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved