當前位置:首頁 » 編程語言 » sql讀取文件

sql讀取文件

發布時間: 2023-07-05 22:03:54

sql讀取txt內容

SQL Server 裡面有一個命令可以直接將文本文件導入到資料庫
可以設置分割的字元
如下:
BULK INSERT
以用戶指定的格式復制一個數據文件至資料庫表或視圖中。

語法
BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }
[ WITH
(
[ BATCHSIZE [ = batch_size ] ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]
[ [ , ] DATAFILETYPE [ =
{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]
[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]
[ [ , ] FIRSTROW [ = first_row ] ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]
[ [ , ] LASTROW [ = last_row ] ]
[ [ , ] MAXERRORS [ = max_errors ] ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]
[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]
[ , [ TABLOCK ] ]
)
]

參數
'database_name'

是包含指定表或視圖的資料庫的名稱。如果未指定,則系統默認為當前資料庫。

'owner'

是表或視圖所有者的名稱。當執行大容量復制操作的用戶擁有指定的表或視圖時,owner 是可選項。如果沒有指定 owner 並且執行大容量復制操作的用戶不擁有指定的表或視圖,則 Microsoft® SQL Server™ 將返回錯誤信息並取消大容量復制操作。

'table_name'

是大容量復制數據於其中的表或視圖的名稱。只能使用那些所有的列引用相同基表所在的視圖。有關向視圖中復制數據的限制的更多信息,請參見 INSERT。

'data_file'

是數據文件的完整路徑,該數據文件包含要復制到指定表或視圖的數據。BULK INSERT 從磁碟復制數據(包括網路、軟盤、硬碟等)。

data_file 必須從運行 SQL Server 的伺服器指定有效路徑。如果 data_file 是遠程文件,則請指定通用命名規則 (UNC) 名稱。

BATCHSIZE [ = batch_size ]

指定批處理中的行數。每個批處理作為一個事務復制至伺服器。SQL Server提交或回滾(在失敗時)每個批處理的事務。默認情況下,指定數據文件中的所有數據是一個批處理。

CHECK_CONSTRAINTS

指定在大容量復制操作中檢查 table_name 的任何約束。默認情況下,將會忽略約束。

CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]

指定該數據文件中數據的代碼頁。僅當數據含有字元值大於 127 或小於 32 的 char、varchar 或 text 列時,CODEPAGE 才是適用的。

CODEPAGE 值 描述
ACP char、varchar 或 text 數據類型的列從 ANSI/Microsoft Windows® 代碼頁 ISO 1252 轉換為 SQL Server 代碼頁。
OEM(默認值) char、varchar 或 text 數據類型的列被從系統 OEM 代碼頁轉換為 SQL Server 代碼頁。
RAW 並不進行從一個代碼頁到另一個代碼頁的轉換;這是最快的選項。
code_page 特定的代碼頁號碼,例如 850。

DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ]

指定 BULK INSERT 使用指定的默認值執行復制操作。

DATAFILETYPE 值 描述
char(默認值) 從含有字元數據的數據文件執行大容量復制操作。
native 使用 native(資料庫)數據類型執行大容量復制操作。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 實用工具從 SQL Server 進行的。
widechar 從含有 Unicode 字元的數據文件中執行大容量復制操作。
widenative 執行與 native 相同的大容量復制操作,不同之處是 char、varchar 和 text 列在數據文件中存儲為 Unicode。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 實用工具從 SQL Server 進行的。該選項是對 widechar 選項的一個更高性能的替代,並且它用於使用數據文件從一個運行 SQL Server 的計算機向另一個計算機傳送數據。當傳送含有 ANSI 擴展字元的數據時,使用該選項以便利用 native 模式的性能。

FIELDTERMINATOR [ = 'field_terminator' ]

指定用於 char 和 widechar 數據文件的欄位終止符。默認的欄位終止符是 /t(製表符)。

FIRSTROW [ = first_row ]

指定要復制的第一行的行號。默認值是 1,表示在指定數據文件的第一行。

FIRE_TRIGGERS

指定目的表中定義的任何插入觸發器將在大容量復制操作過程中執行。如果沒有指定 FIRE_TRIGGERS,將不執行任何插入觸發器。

FORMATFILE [ = 'format_file_path' ]

指定一個格式文件的完整路徑。格式文件描述了含有存儲響應的數據文件,這些存儲響應是使用 bcp 實用工具在相同的表或視圖中創建的。格式文件應該用於以下情況:

數據文件含有比表或視圖更多或更少的列。

列使用不同的順序。

列分割符發生變化。

數據格式有其它的改變。通常,格式文件通過 bcp 實用工具創建並且根據需要用文本編輯器修改。有關更多信息,請參見 bcp 實用工具。
KEEPIDENTITY

指定標識列的值存在於導入文件中。如果沒有指定 KEEPIDENTITY,在導入的數據文件中此列的標識值將被忽略,並且 SQL Server 將根據表創建時指定的種子值和增量值自動賦給一個唯一的值。假如數據文件不含該表或視圖中的標識列,使用一個格式文件來指定在導入數據時,表或視圖中的標識列應被忽略;SQL Server 自動為此列賦予唯一的值。有關詳細信息,請參見 DBCC CHECKIDENT。

KEEPNULLS

指定在大容量復制操作中空列應保留一個空值,而不是對插入的列賦予默認值。

KILOBYTES_PER_BATCH [ = kilobytes_per_batch ]

指定每個批處理中數據的近似千位元組數(KB)。默認情況下,KILOBYTES_PER_BATCH 未知。

LASTROW [ = last_row ]

指定要復制的最後一行的行號。默認值是 0,表示指定數據文件中的最後一行。

MAXERRORS [ = max_errors ]

指定在大容量復制操作取消之前可能產生的錯誤的最大數目。不能被大容量復制操作導入的每一行將被忽略並且被計為一次錯誤。如果沒有指定 max_errors,默認值為 0。

ORDER ( { column [ ASC | DESC ] } [ ,...n ] )

指定數據文件中的數據如何排序。如果裝載的數據根據表中的聚集索引進行排序,則可以提高大容量復制操作的性能。如果數據文件基於不同的順序排序,或表中沒有聚集索引,ORDER 子句將被忽略。給出的列名必須是目的表中有效的列。默認情況下,大容量插入操作假設數據文件未排序。

n

是表示可以指定多列的佔位符。

ROWS_PER_BATCH [ = rows_per_batch ]

指定每一批處理數據的行數(即 rows_per_bacth)。當沒有指定 BATCHSIZE 時使用,導致整個數據文件作為單個事務發送給伺服器。伺服器根據 rows_per_batch 優化大容量裝載。默認情況下,ROWS_PER_BATCH 未知。

ROWTERMINATOR [ = 'row_terminator' ]

指定對於 char 和 widechar 數據文件要使用的行終止符。默認值是 /n(換行符)。

TABLOCK

指定對於大容量復制操作期間獲取一個表級鎖。如果表沒有索引並且指定了 TABLOCK,則該表可以同時由多個客戶端裝載。默認情況下,鎖定行為是由表選項 table lock on bulk load 決定的。只在大容量復制操作期間控制鎖會減少表上的鎖爭奪,極大地提高性能。

注釋
BULK INSERT 語句能在用戶定義事務中執行。對於一個用 BULK INSERT 語句和 BATCHSIZE 子句將數據裝載到使用多個批處理的表或視圖中的用戶定義事務來說,回滾它將回滾所有發送給 SQL Server 的批處理。

許可權
只有 sysadmin 和 bulkadmin 固定伺服器角色成員才能執行 BULK INSERT。

示例
本例從指定的數據文件中導入訂單詳細信息,該文件使用豎杠 (|) 字元作為欄位終止符,使用 |/n 作為行終止符。

BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:/orders/lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = '|/n'
)

本例指定 FIRE_TRIGGERS 參數。

BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:/orders/lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = ':/n',
FIRE_TRIGGERS

⑵ sql讀寫文件的函數有哪些

你指的是什麼資料庫呢?不同資料庫是不一樣的。
若是oracle可用utl_file包,寫法如下:
DECLARE f utl_file.file_type;
begin
f := utl_file.fopen('testfile','abc.txt','w');
utl_file.put_line(f,'abc!');
utl_file.put_line(f,'123456!');
utl_file.put_line(f,'我愛你中國!');
utl_file.fclose(f);
end
//
具體可參考oralce SQL語法文檔。

⑶ 怎麼用sql語句讀取excel文件啊

//for get driver...
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;

//for read the file...
CDatabase database;
CString sSql;
CString sItem1,sItem2;
CString sDsn;
CString sFile;

//-------------------在這里把sFile賦值為你要讀取的xls文件的文件名.

///////////////////////////////////////
// Get the names of the installed drivers
//////////////////////////////

if(!SQLGetInstalledDrivers(szBuf,cbBufMax,& cbBufOut))
sDriver="";
else
{
// Search for the driver...
do
{
if( strstr( pszBuf, "Excel" ) != 0 )
{
// Found !
sDriver = CString( pszBuf );
break;
}
pszBuf = strchr( pszBuf, '\0' ) + 1;
}
while( pszBuf[1] != '\0' );
}

// Retrieve the name of the Excel driver. This is
// necessary because Microsoft tends to use language
// specific names like "Microsoft Excel Driver (*.xls)" versus
// "Microsoft Excel Treiber (*.xls)"
// sDriver = GetExcelDriver();

if( sDriver.IsEmpty() )
{
AfxMessageBox("No Excel ODBC driver found");
exit(0);
}

sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);

TRY
{
// Open the database using the former created pseudo DSN
database.Open(NULL,false,false,sDsn);

// Allocate the recordset
CRecordset recset( &database );

// Build the SQL string
// Remember to name a section of data in the Excel sheet using "Insert->Names" to be
// able to work with the data like you would with a table in a "real" database. There
// may be more than one table contained in a worksheet.

sSql = "SELECT [A],[B]" //把A,B為xls文件裡面的列,如果要讀取多列的話,用,隔開
"FROM [Sheet1$] " //xls文件裡面的第一個表,如果xls文件里的第一個表不是Sheet1這個名字的話,最好改為Sheet1
"ORDER BY [A],[B]"; //從小到大輸出,A列為一級,B列為二級

// Execute that query (implicitly by opening the recordset)
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);

// Browse the result
while( !recset.IsEOF() )//不斷讀取A,B列的數據
{
//Read the result line
recset.GetFieldValue("A",sItem1); //把A列的數據傳給sItem1
recset.GetFieldValue("B",sItem2); //把B列的數據傳給sItem2
//注意!這里的sItem1,sItem2是不斷更新的

// Close the database
database.Close();
}

CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;

⑷ 讀取sql文件並寫入到資料庫,用SQL語句。

直接運行.sql

SQL Server Management Studio

New Query
把sql文件拖入新打開的新建查詢頁面里

熱點內容
編譯framework 發布:2025-02-09 10:42:11 瀏覽:380
五子棋對戰演算法 發布:2025-02-09 10:12:19 瀏覽:712
php樹菜單 發布:2025-02-09 10:04:10 瀏覽:359
linux保存ip 發布:2025-02-09 10:04:10 瀏覽:23
四川霜狼伺服器怎麼樣 發布:2025-02-09 10:02:44 瀏覽:145
Vs中h編譯選項是灰的 發布:2025-02-09 10:01:59 瀏覽:557
安卓43怎麼升級44 發布:2025-02-09 09:51:33 瀏覽:463
美國雲伺服器快還是香港快 發布:2025-02-09 09:34:33 瀏覽:988
怎麼解壓qq文件 發布:2025-02-09 09:18:14 瀏覽:581
安卓最新怎麼調靈敏度更穩 發布:2025-02-09 09:12:44 瀏覽:400