0

我创建了一个接受 3 个参数的存储过程。

@row int
,@column VARCHAR(17)
,@value int

我希望@value参数接受文本或整数,因为它根据@column参数更新不同的列。

请指教

4

3 回答 3

5

不要这样做,创建两个具有不同签名和名称的存储过程。然后您将不需要该@column参数,并且每个存储过程都将很简单并且行为一致。

您将交换存储过程定义IF的 s 和CASEes。过程的查询计划将表现一致,因此可以可靠地缓存,并且您将写入总体上相同的行数。

根据传递的参数执行不同查询的存储过程是一个等待发生的性能问题。

于 2012-11-07T10:04:48.940 回答
1

您可以将其声明为sql_variant.

@row int,
@column VARCHAR(17),
@value sql_variant

但这听起来是个坏主意

于 2012-11-07T10:03:48.907 回答
1

您可以声明 varchar 参数,然后传递 int 并进行强制cast(@value as int)
转换 另一种方法是声明两个参数@value_int@value_varchar

但我同意@podiluska - 听起来你有一些设计问题,你确定你真的需要吗?

于 2012-11-07T10:05:44.207 回答