T-SQL存储过程 - 如何使参数接受整数或文本

时间:2012-11-07 10:01:45

标签: sql sql-server tsql stored-procedures

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

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

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

请告知

3 个答案:

答案 0 :(得分:5)

不要这样做,使用不同的签名和名称制作两个存储过程。然后你不需要@column参数,每个存储过程都很简单,行为一致。

您将为存储过程定义交换IFCASE es。程序的查询计划将表现一致,因此可以可靠地缓存,并且您将整体写出相同的数字行。

基于传递的参数执行大量不同查询的存储过程是等待发生的性能问题。

答案 1 :(得分:1)

您可以将其声明为sql_variant

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

但这听起来像是一个坏主意

答案 2 :(得分:1)

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

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