Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL存储过程-如何生成接受整数或文本的参数_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

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

T-SQL存储过程-如何生成接受整数或文本的参数,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我创建了一个接受3个参数的存储过程 @row int ,@column VARCHAR(17) ,@value int 我希望@value参数接受文本或整数,因为它会根据@column参数更新不同的列 请告知您可以将其声明为 但是这听起来像个坏主意不要这样做,用不同的签名和名称创建两个存储过程。这样您就不需要@column参数,而且每个存储过程都很简单,并且行为一致 对于存储过程定义,您将使用IFs和CASEes进行交易。过程的查询计划的行为将保持一致,因此可以可靠地缓存,并且总体上写的行数相

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

@row int
,@column VARCHAR(17)
,@value int
我希望
@value
参数接受文本或整数,因为它会根据
@column
参数更新不同的列

请告知

您可以将其声明为


但是这听起来像个坏主意

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

对于存储过程定义,您将使用
IF
s和
CASE
es进行交易。过程的查询计划的行为将保持一致,因此可以可靠地缓存,并且总体上写的行数相同


根据传递的参数执行各种不同查询的存储过程是一个有待解决的性能问题。

您可以声明varchar参数,然后传递int并执行cast
cast(@value as int)

另一种方法是声明两个参数
@value\u int
@value\u varchar

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

建议:有两个单独的参数-一个用于字符串,一个用于int-不要混合-它很快就会变得混乱。。。
@row int,
@column VARCHAR(17),
@value sql_variant