Sql server 向SQL Server存储过程传递多个参数

Sql server 向SQL Server存储过程传递多个参数,sql-server,stored-procedures,parameters,Sql Server,Stored Procedures,Parameters,我使用的是SQL Server 2012,我有一个包含25个以上参数的存储过程,我需要从C#调用它。根据我的经验,当出现问题时,拥有这么多的参数可能会让人头疼,试图确定哪个参数是错误的/缺失的/不管什么 我以前使用过Oracle,它有用户定义类型的概念,因此可以创建一个包含25个参数的类型,并将其传入。现在我们只有一个参数 在SQL Server中,这与什么是等价的?我已经读过关于表值参数的内容,很明显这是我应该使用的,但是我想知道对于只有一行(即一组参数)的表来说,这是否太过了。我看到的每个示

我使用的是SQL Server 2012,我有一个包含25个以上参数的存储过程,我需要从C#调用它。根据我的经验,当出现问题时,拥有这么多的参数可能会让人头疼,试图确定哪个参数是错误的/缺失的/不管什么

我以前使用过Oracle,它有用户定义类型的概念,因此可以创建一个包含25个参数的类型,并将其传入。现在我们只有一个参数


在SQL Server中,这与什么是等价的?我已经读过关于表值参数的内容,很明显这是我应该使用的,但是我想知道对于只有一行(即一组参数)的表来说,这是否太过了。我看到的每个示例都描述了如何使用这些参数在多行中传递,因此我想知道是否有一种更简单的方法我错过了。

这将如何帮助您识别导致失败的参数?最简单的示例是“预期25个参数,仅收到24个”。然后你手上有一个搜索。或者,您错误地交换了int和varchar,并且出现了某种无效类型错误,但没有指示在何处。使用UDT,您不能犯这些错误(或者您可以,但您可以在编译时发现)。我仍然对我曾经看到的C#错误有着美好的回忆——“CreateCustomer方法不需要重载44个参数”。如果您使用一个表值参数,并且总是在TVP中传递“一行”,那么我会同意——这太过分了。正如@Dave.Gugg所建议的那样,它不会帮助您识别丢失/无效的参数。如果我站在你的立场(并使用C#),我会在数据层中有一个调用SQL SP的方法/函数。根据应用程序设计的不同,C#方法将接受一个具有25个属性的对象或每个SP输入参数一个输入参数。在该C#方法中,验证所有25个属性/参数的存在性和有效性。