【发布时间】:2018-04-25 17:29:12
【问题描述】:
我想使用Execute SQL Task 查询从数据库表中返回varbinary 数据。该查询需要UniqueIdentifier 作为参数,该参数以string 形式存储在Package 变量中。此查询的结果(varbinary 数据)将存储在 Byte 类型的第二个变量中。
下表显示了我的局部变量列表,注意 DocumentGuid 是由控制流的另一部分预先填充的
| Variable Name | Qualified Name | Scope | Data Type | Comments |
|---------------|--------------------|---------|-----------|------------------------------------------|
| DocumentGuid | User::DocumentGuid | Package | String | Used to store a GUID value |
| DocumentData | User::DocumentData | Package | Byte | Used to hold varbinary data from a query |
当我尝试在这样的Execute SQL Task 查询中使用它时:
SELECT DocData
FROM docsRepo
WHERE DocumentGuid = ?
传入参数为
| Variable name | Direction | Data Type | Parameter Name | Parameter Size |
|--------------------|-----------|-----------|----------------|----------------|
| User::DocumentGuid | Input | GUID | 0 | 100 |
和结果集
| Result Name | Variable Name |
|-------------|--------------------|
| DocData | User::DocumentData |
我收到以下错误:
[执行 SQL 任务] 错误:执行查询“SELECT DocData FROM
dbo.docsRepo...”失败,出现以下错误:“转换失败 从字符串转换为唯一标识符时。”。 可能的失败原因:查询有问题,“ResultSet” 属性设置不正确,参数设置不正确,或 连接未正确建立。
我在这里遗漏了某种基本逻辑吗?以下脚本在 SQL Server 中运行良好:
SELECT DocData
FROM docsRepo
WHERE DocumentGuid = '53A394A7-5D2B-40C0-A04D-90553E4535C3'
【问题讨论】:
-
将参数类型改为字符串。我知道,它是一个 guid,但由于它是一个字符串变量,所以保持数据类型对齐并让后端 rdbms 处理转换 - 这行得通吗?
-
@billinkc 知道了。错误消息不是来自查询执行,而是来自 Execute SQL Task 试图获取字符串参数并将其转换为 GUID。 SSIS 无法做到这一点,因此在您进入框内的查询之前它会令人窒息。
标签: sql sql-server ssis uniqueidentifier ssis-2008