0

SQL Server 2000 から SQL Server 2012 にいくつかのテーブルをロードする必要があります。BIDS でこれを実行できると聞いたのですが、私はそれにかなり慣れていないので、助けを求めていました。私はそれでどんな助けが得られても本当に感謝しています.

BIDS ヘルパーをインストールしました。すでに以下のコードを使用しています。しかし、それは私にエラーを与えます、

エラー 1187 構文が正しくありません。有効な開始名文字が必要です。エラー 1188 文字 '#'、16 進値 0x23 は XML 名では無効です。エラー 1189 文字 '@'、16 進値 0x40 は、XML 名の先頭では使用できません。


<#@ template language="C#" hostspecific="true" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.IO" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<!--
<#
    string connectionStringSource = @"Server=xxxxx;Initial Catalog=xxxx;Integrated Security=SSPI;Provider=sqloledb";
    string connectionStringDestination = @"Server=xxxxxx;Initial Catalog=xxxxxxx;Integrated Security=SSPI;Provider=SQLNCLI11.1";
    string SrcTableQuery =     @"
SELECT
    SCHEMA_NAME(t.schema_id) AS schemaName
,   T.name AS tableName
FROM
    sys.tables AS T
WHERE
    T.is_ms_shipped = 0
    AND T.name <> 'sysdiagrams';
";

    DataTable dt = null;
    dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
#>    
-->
    <Connections>
        <OleDbConnection
            Name="SRC"
            CreateInProject="false"
            ConnectionString="<#=connectionStringSource#>"
            RetainSameConnection="false">
        </OleDbConnection>
        <OleDbConnection
            Name="DST"
            CreateInProject="false"
            ConnectionString="<#=connectionStringDestination#>"
            RetainSameConnection="false">
        </OleDbConnection>
    </Connections>

    <Packages>
        <# foreach (DataRow dr in dt.Rows) { #>
            <Package ConstraintMode="Linear"
                Name="<#=dr[1].ToString()#>"

            >
            <Variables>
                <Variable Name="SchemaName" DataType="String"><#=dr[0].ToString()#></Variable>
                <Variable Name="TableName" DataType="String"><#=dr[1].ToString()#></Variable>
                <Variable Name="QualifiedTableSchema"
                          DataType="String"
                          EvaluateAsExpression="true">"[" +  @[User::SchemaName] + "].[" +  @[User::TableName] + "]"</Variable>
            </Variables>
            <Tasks>
                <Dataflow
                    Name="DFT"
                >
                    <Transformations>
                        <OleDbSource
                            Name="OLE_SRC <#=dr[0].ToString()#>_<#=dr[1].ToString()#>"
                            ConnectionName="SRC"
                        >
                            <TableFromVariableInput VariableName="User.QualifiedTableSchema"/>
                        </OleDbSource>
                        <OleDbDestination
                            Name="OLE_DST <#=dr[0].ToString()#>_<#=dr[1].ToString()#>"
                            ConnectionName="DST"
                            KeepIdentity="true"
                            TableLock="true"
                            UseFastLoadIfAvailable="true"
                            KeepNulls="true"
                            >
                            <TableFromVariableOutput VariableName="User.QualifiedTableSchema" />                        
                        </OleDbDestination>
                    </Transformations>
                </Dataflow>

            </Tasks>
            </Package>
        <# } #>
    </Packages>
</Biml>
4

1 に答える 1

0

これは、Visual Studio で多くの BimlScript を実行しようとすることの腹立たしいことです。エディターは、XML マークアップを行っていることを「認識」しているため、BimlScript を構成するすべての拡張機能が「間違っている」ため、それらを強調表示し、怒った赤い波線を付けて、ここに本当に有効なコードがあるかどうかを疑問視させます。

私のエラー リストには、あなたが見ているのと同じものが表示されますが、これは、Visual Studio の組み込みエラー チェッカーを無視できる数少ないケースの 1 つです。

53 エラーはあるが、biml は 1 つではない

代わりに、コードが適切かどうかの真のテストは、.biml ファイルを右クリックし、[Biml のエラーをチェック] を選択することです。

Biml でエラーを確認する

次のようなダイアログが表示されるはずです

ここに画像の説明を入力

もしそうなら、[Generate SSIS Packages] をクリックしてから、頭が吹き飛ばされてしまったので、頭に思いをよみがえらせるテープを手に入れてください ;)

運用上の注意

提供されたコードは、ソースからターゲットにすべてのデータをコピーすることに注意してください。ただし、これが毎月の操作になることも指定しているため、SQL 実行タスクを介して切り捨てステップを追加するか、ルックアップ変換 (または 2 つ) を考慮して新しいデータと既存のデータを判断し、変更検出。

于 2014-10-29T14:41:29.610 に答える