可能是最直接的方式做這將是具有固定寬度的平面文件作爲數據源創建的SSIS包。我將你的目標設置爲與你的最終表格不同的東西(即使用「rawdata」模式或者甚至是一個名爲「rawdata」的獨立數據庫)。您可以使用此初始映射來創建包含建議數據類型的表格(但您確實需要確保知道您的數據)。
SSIS
一旦你做到了這一點,你可以創建在SSIS foreach循環容器,通過具有這些平面文件源和您的原始目的地的特定文件夾進行迭代。如果這是一個一次性的事情,你可以通過安裝SQL Server數據工具到當前的Visual Studio 2010中安裝這樣做(如果有的話),否則安裝程序將VS 2010殼牌內安裝SSDT,如果你沒有它。如果這不是一次性的,那麼您將需要考慮安裝SSIS的授權,以便將其作爲一個可以安排定期運行的軟件包進行部署。
做不到這一切,你可以通過打開SSMS生成表模式,右鍵單擊目標數據庫,點擊任務,數據導入,選擇平面文件源,固定寬度的目標,映射你的源(你要去通過創建這些列的痛苦,如果你真的有> 100),然後生成一個創建表腳本。
但是,如果你真的只有那三列......
CREATE TABLE schema rawdata AUTHORIZATION <pick an owner here>;
CREATE TABLE rawdata.rawfields (
fieldname varchar(8), -- i'm actually unclear here because
-- the next column's name/purpose is unclear
fieldsize int, -- or other numeric datatype
fieldcomment varchar(255)
);
然後,你可以編寫一個簡單的C#或PowerShell腳本來迭代目錄中的文件。這看起來是這樣的:
C#
string fieldname, fieldsize, fieldcomments;
var files = System.IO.Directory.GetFiles("path", "*.ext");
foreach (var file in files)
{
var lines = System.IO.File.ReadAllLines(file);
foreach (var line in lines)
{
fieldname = line.Substring(0, 8);
fieldsize = line.Substring(9, 1);
fieldcomments = line.Substring(10, 73);
}
}
從這裏,我會成立到SQL Server實例的連接,創建一個參數插入命令,插入變量中的數據。
BULK INSERT
創建一個格式文件:
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharFixed" LENGTH="8"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="2"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="68"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="fieldname" xsi:type="SQLCHAR" />
<COLUMN SOURCE="2" NAME="fieldlength" xsi:type="SQLCHAR" />
<COLUMN SOURCE="3" NAME="fieldcomments" xsi:type="SQLCHAR" />
</ROW>
</BCPFORMAT>
那麼你可以寫一個PowerShell腳本或C#應用程序遍歷目錄中的文件(如上)和電話(假設你可以得到一個受信任的連接)
bcp <<yourdatabase>>.rawdata.rawfiles in \\path\to\data\file.ext
-f \\path\to\format\file.Xml -T
否則
bcp <<yourdatabase>>.rawdata.rawfiles in \\path\to\data\file.ext
-f \\path\to\format\file.Xml -U username -P password
你能夠使用SSIS嗎? – swasheck 2013-04-23 15:25:31
如何知道表名,列數據類型,主鍵等? – 2013-04-23 15:26:02
表名稱需要被稱爲結果。所有字段都是字符,da_ctat可以是唯一鍵。 – Nick 2013-04-23 15:48:14