Sql server SSIS-传递数值参数以执行SQL任务

Sql server SSIS-传递数值参数以执行SQL任务,sql-server,tsql,ssis,numeric,Sql Server,Tsql,Ssis,Numeric,我正在执行SQL任务中使用OLE DB连接。我已经在SQL任务的“参数映射”部分将所需的参数映射为数字类型。然后我想做的是将它们添加到一起,但不是添加它们,而是将它们连接起来。尽管我已经将它们设置为数字类型,但它们将作为字符串处理 例如,如果我映射值为1、1和0的三个参数(使用?+?+?)。当我试着把它们加起来时,我得到的是110而不是2。如果我将它们转换为整数(使用cast(?as integer)+cast(?as integer)+cast(?as integer)),那么我得到了期望的结

我正在执行SQL任务中使用OLE DB连接。我已经在SQL任务的“参数映射”部分将所需的参数映射为数字类型。然后我想做的是将它们添加到一起,但不是添加它们,而是将它们连接起来。尽管我已经将它们设置为数字类型,但它们将作为字符串处理

例如,如果我映射值为1、1和0的三个参数(使用?+?+?)。当我试着把它们加起来时,我得到的是110而不是2。如果我将它们转换为整数(使用cast(?as integer)+cast(?as integer)+cast(?as integer)),那么我得到了期望的结果和一个2的答案

所以我的问题是,当我在参数映射中将它们声明为数字时,为什么要将它们作为字符串类型处理

谢谢,
Dan

我建议您创建一个脚本任务,并将参数相加为一个新参数,然后可以在SQL查询任务中单独使用该参数。或者,将所有参数传递给查询,而不添加它们,并将查询更改为自身求和


是否在SQL查询任务的小脚本窗格/窗口中添加thim?此窗口非常有限,很难进行错误检查。更可取的做法是将此限制为SQL查询(最好不超过一个
EXEC dbo.MyProcedure?,?,?
),并将计算分隔为脚本任务或SQL过程/脚本。

FYI,我不想在屏幕截图中添加varchar类型:)我从未使用过
numeric
,请尝试
int32
long
。没有int32类型。以下是可用内容的列表:Null Short、Long、Float、Double、CURRENTY、variant\u bool、Decimal、Signedchar、Byte、Ushort、Ulong、large\u integer、Ularge\u integer、Filetime、Guid、Varchar、NVarchar、Numeric、DBDate、DBTimestamp、DB\u VARNIMERIC。此外,这里还指定了数值类型应等效于什么。所以我仍然不明白为什么它会连接而不是添加。废话,对不起,我读了参数,不知怎的,我确信你们在谈论变量。是的,似乎有多种方法可以剥这只猫的皮,我同意。我要让它工作。但我真的很好奇,想知道为什么参数应该是数字,而它却被当作字符串值处理。e、 g.这可能是一个bug,还是仅仅是OLE DB的一个函数起作用。任务中给出您提到的结果的SQLStatement是什么?我只需分配给这样一个变量[set@myVar=?+?+?;]结果将是110而不是2.hmm,我认为基本上问题在于SSIS通过在执行前添加参数并将整个内容作为另一个经过修改的字符串传递给sql Server,将文本转换为sql查询。我猜它只是在试图通过读取字符串、插入值并转换为另一个字符串来生成字符串时感到困惑,并将“+”符号视为串联。我还没有找到任何关于这个窗口的特定语法的文档,所以很难判断它是否是一个bug。我不相信它,把这里的文字控制在最低限度;尽可能使用记录良好的区域