0

我必须从 SQL Server 2000 将几个表加载到 SQL Server 2012 中。我听说 BIDS 可以做到这一点,我对它很陌生,想得到一些帮助。我真的很感激我得到的任何帮助。

我已经安装了 BIDS 助手。已经使用了下面的代码。但它给了我错误说明,

错误 1187 非法语法。期望有效的开始名称字符。错误 1188 字符“#”,十六进制值 0x23 在 XML 名称中是非法的。错误 1189 字符 '@',十六进制值 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 内置错误检查器的少数情况之一。

53 错误,但 biml 不是一个

相反,代码是否良好的真正测试是右键单击 .biml 文件并选择“检查 Biml 是否有错误”

检查 Biml 是否有错误

你应该得到一个像

在此处输入图像描述

如果是这样,请单击“生成 SSIS 包”,然后拿一些胶带将您的思绪重新贴回您的脑海中,因为它刚刚被吹走;)

操作说明

请注意,提供的代码会将所有数据从源复制到目标。但是,您还指定这将是每月一次的操作,因此您要么希望通过执行 SQL 任务添加一个截断步骤,要么考虑一个查找转换(或两个)来确定新数据与现有数据和变化检测。

于 2014-10-29T14:41:29.610 回答