一般来说,程序不会根据我的经验修改输入参数,因此将所有输入参数READONLY
标记为明确需要非读取的参数似乎是一种好习惯。
但我不是SQLServer的人,这里有没有公认的最佳做法?
答案 0 :(得分:1)
表值参数必须在sql server中只读。 来自相关的MSDN页面:
<强>限制强>
表值参数具有以下限制:
- SQL Server不维护表值参数列的统计信息。
- 表值参数必须作为输入READONLY参数传递给Transact-SQL例程。您无法对例程正文中的表值参数执行UPDATE,DELETE或INSERT等DML操作。
- 您不能将表值参数用作SELECT INTO或INSERT EXEC语句的目标。表值参数可以在SELECT INTO的FROM子句中,也可以在INSERT EXEC字符串或存储过程中。
但是,其他类型的变量可能是也可能不是只读的,开发人员有责任决定是否将其标记为只读。
存储过程的输入参数不能在存储过程的主体外部使用,因此无论是否为readonly都无关紧要。
我个人从不打算只读取非表格类型的参数,并且通常会在存储过程中使用输入参数,就好像它们是本地声明的变量一样。我发现编写,读取和维护紧凑代码更容易,所以如果我有一个参数可以用来设置过程中的值,并且它的名称作为参数和变量都有意义,我很乐意设置值在程序内部。
当您谈到最佳做法时,您可能希望阅读Aaron Bertrand撰写的this article