在公共语言运行时 (CLR) 中,存储过程作为 Microsoft .NET Framework 程序集中某一类的公共静态方法实现。该静态方法可以声明为 void,或者返回整数值。如果它返回某一整数值,则返回的整数将视作来自该存储过程的返回代码。例如:
EXECUTE @return_status = procedure_name
@return_status 变量将包含该方法返回的值。如果该方法声明为 void,则返回代码是 0。
如果该方法具有参数,则 .NET Framework 实现中的参数数目应与该存储过程的 Transact-SQL 声明中使用的参数数目相同。
传递到 CLR 存储过程的参数可以是在托管代码中具有等效值的任何本机 SQL Server 类型。对于用于创建该过程的 Transact-SQL 语法,应该使用最合适的等效本机 SQL Server 类型指定这些类型。有关类型转换的详细信息,请参阅 映射 CLR 参数数据。
表值参数
表值参数 (TVP) 即传递到某一过程或函数的用户定义表类型,它提供了一种将多行数据传递到服务器的高效方法。TVP 提供与参数数组类似的功能,但灵活性更高并且与 Transact-SQL 的集成更紧密。它们还提供提升性能的潜力。TVP 还有助于减少到服务器的往返次数。可以将数据作为 TVP 发送到服务器,而不是向服务器发送多个请求(例如,对于标量参数列表)。用户定义表类型不能作为表值参数传递到在 SQL Server 进程中执行的托管存储过程或函数,也不能从这些存储过程或函数中返回。有关 TVP 的详细信息,请参阅表值参数(数据库引擎)。