【发布时间】:2019-04-22 00:36:51
【问题描述】:
情况:我正在使用 Allen-Bradley (Rockwell) 软件包,称为 FactoryTalk Transaction Manager,它允许 PLC 使用 SQL Server 的强大功能来做事。
使用 SQL Server 2012,我需要在存储过程中指定参数的方向,我错误地认为它就像一个简单的
@QuarantineReason nvarchar(256) OUTPUT
但是,当在 SSMS 的对象资源管理器中查看时,存储过程参数的属性会显示
@QuarantineReason (nvarchar(256), Input/Output, No default)
为了大大简化我的生活,我希望参数只是一个输出,因为这样可以节省我在 Allen-Bradley 软件中绑定事物的输入端。
我在网上找到了几个 MS 文档资源,但它们似乎都将 C# 指定为代码库,这让我感到困惑。
SqlParameter.Direction Property
Input, Output and Input/Output SqlParameter Behavior Explained
【问题讨论】:
-
AFAIK 没有仅输出选项
-
T-SQL 中没有只输出参数这样的东西;始终可以传递输入值,并且该值将可用于代码。将此类参数视为“仅输出”的客户端代码在调用过程时根本不指定值。当然,除非它不知道这个 T-SQL 怪癖,就像这里的情况一样。考虑给参数一个显式但未使用的虚拟默认值 (
@QuarantineReason NVARCHAR(256) OUTPUT = NULL);软件可能会检测到这一点并允许您省略输入绑定。 -
@JeroenMostert 请回答您的评论,我将接受它作为最相关的答案。它非常清楚,涉及客户端软件和所有内容。
标签: sql sql-server tsql sql-server-2012