执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记。例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @varParameter
的参数标记,而 OLE DB 连接类型要求使用问号 (?) 参数标记。
在变量与参数之间的映射中可以用作参数名的名称也因连接管理器类型而异。例如,ADO.NET 连接管理器类型使用带 @ 前缀的用户定义名称,而 OLE DB 连接管理器类型要求使用从 0 开始的序数数值作为参数名。
下表总结了执行 SQL 任务可以使用的连接管理器类型的 SQL 命令要求。
连接类型 |
参数标记 |
参数名称 |
示例 SQL 命令 |
---|---|---|---|
ADO |
? |
Param1, Param2, …… |
SELECT FirstName, LastName, Title FROM Person.Person WHERE BusinessEntityID = ? |
ADO.NET |
@<参数名称> |
@<参数名称> |
SELECT FirstName, LastName, Title FROM Person.Person WHERE BusinessEntityID = @parmBusinessEntityID |
ODBC |
? |
1, 2, 3, … |
SELECT FirstName, LastName, Title FROM Person.Person WHERE BusinessEntityID = ? |
EXCEL 和 OLE DB |
? |
0, 1, 2, 3, … |
SELECT FirstName, LastName, Title FROM Person.Person WHERE BusinessEntityID = ? |
在 ADO.NET 和 ADO 连接管理器中使用参数
ADO.NET 和 ADO 连接管理器对使用参数的 SQL 命令有特定要求:
- ADO.NET 连接管理器要求 SQL 命令将参数名称用作参数标记。这意味着变量可以直接映射到参数。例如,变量 @varName
映射到名为 @parName
的参数,并向参数 @parName
提供值。 - ADO 连接管理器要求 SQL 命令使用问号 (?) 作为参数标记。但是,您可以使用任何用户定义名称(整数值除外)作为参数名称。
为了向参数提供值,可将变量映射到参数名称。然后,执行 SQL 任务使用参数列表中参数名称的序数值来将值从变量加载到参数。
在 EXCEL、ODBC 和 OLE DB 连接管理器中使用参数
EXCEL、
ODBC 和 OLE DB 连接管理器要求 SQL 命令使用问号 (?)作为参数标记,并使用从 0 或 1 开始的数值作为参数名称。如果执行
SQL 任务使用 ODBC 连接管理器,则映射到查询中的第一个参数的参数名称将为 1;否则该参数将命名为
0。对于后续参数,参数名称的数值指示参数名称在 SQL 命令中映射到的参数。例如,名为 3 的参数映射到第三个参数,这是由 SQL
命令中的第三个问号 (?) 来表示的。
若要向参数提供值,可以将变量映射到参数名称,然后执行 SQL 任务使用参数名称的序数值将值从变量加载到参数。
连接管理器使用的访问接口不同时,某些 OLE DB 数据类型可能不受支持。例如,Excel 驱动程序只识别有限的一组数据类型。有关带有 Excel 驱动程序的 Jet 访问接口的行为的详细信息,请参阅 Excel 源
。
在 OLE DB 连接管理器中使用参数
如果执行 SQL 任务使用 OLE DB 连接管理器,则该任务的 BypassPrepare
属性可用。如果执行 SQL 任务使用带有参数的 SQL 语句,则应将此属性设置为 true
。
使用 OLE DB 连接管理器时,不能使用参数化的子查询,这是因为执行 SQL 任务不能通过 OLE DB 访问接口得到参数信息。但是,您可以使用表达式将参数值串联到查询字符串中,并设置该任务的 SqlStatementSource 属性。