我有例如这个存储过程
ALTER PROCEDURE dbo.PersonaDoc
@cDocumento varchar (20)
AS
SELECT Ruta_Line
FROM Persona
WHERE (documento= @cDocumento)
如果存储过程是
ALTER PROCEDURE dbo.PersonaDoc
@cDocumento varchar (20)
@resultado int OUTPUT
AS
SELECT SET@resultado = nombre
FROM Persona
WHERE (documento= @cDocumento)
我不清楚的是使用存储过程直接带来的数据或为其使用输出值之间的区别,我想在第一种情况下,优势是我可以带来多个值并使用 OUTPUT只有一个,但假设我只想要一个返回值是一样的吗?
差异:
ExecuteNonQuery
将执行存储过程并且不会返回任何结果ExecuteScalar
将返回一个数据,您可以使用它来使用应用程序的一面ExecuteReader
当您想要获取一组数据(即多行和多列)时使用。现在,将存储过程作为参考
执行时:
ExecuteNonQuery
你不会得到结果ExecuteScalar
它会让你null
转过身来,因为你在其中SELECT
进行了分配@resultado = nombre
,要返回一个结果,你必须添加SELECT @resultado
到存储过程的末尾ExecuteReader
以同样的方式返回你null
,你必须做同样的事情ExecuteScalar
或在它的情况下 aSELECT * FROM Persona
(作为一个例子)更新
有了
OUTPUT
它,您可以按值引用您分配为输出值的变量,在您的存储过程的情况下,您可以使用ExecuteScalar
或OUTPUT
,两者都可以根据您的编程方式进行调整。如果您使用的是 C#,代码示例将如下所示,以使用以下方式获取文档的值Direction = ParameterDirection.Output;
: