`
zu14
  • 浏览: 458974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

存储过程中使用Text类型的输出参数(转)

阅读更多
本帖转载自 蝈蝈俊 的BLOG

今天在写一个程序的时候,用到了输出Text类型的的存储过程,但是调试了很久一直不行。在MSDN上查资料,MSDN上有如下信息:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create_4hk5.asp

OUTPUT

Indicates that the parameter is a return parameter. The value of this option can be returned to EXEC[UTE]. Use OUTPUT parameters to return information to the calling procedure. Text, ntext, and image parameters can be used as OUTPUT parameters. An output parameter using the OUTPUT keyword can be a cursor placeholder.

后来在Google上查资料,同时咨询了很多人后,发现MSDN这个描述应该值得商量。理由如下:Text 类型是可以作为 OutPut 参数,但是没法给他赋值。一但赋值就会报错,等于OutPut一点用也没有。


比如下面不带赋值操作的存储过程,创建就没有问题。

create proc p_test @o text=null
out as
go

exec p_test
go

drop proc p_test

但是一旦其中有了赋值操作,问题就来了。比如如下的存储过程:

create proc p_test @o text=null
out as
select @o = 'x'
go

创建的时候就会报以下错误:

Server: Msg 409, Level 16, State 1, Procedure p_test, Line 3
The assignment operator operation cannot take a text data type as an argument.

 

Google 上与此有关的一些讨论:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=e%23BC093DBHA.1828%40tkmsftngp05&rnum=2&prev=/groups%3Fq%3DText,%2Bntext,%2Band%2Bimage%2Bparameters%2Bcan%2Bbe%2Bused%2Bas%2BOUTPUT%2Bparameters%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3De%2523BC093DBHA.1828%2540tkmsftngp05%26rnum%3D2

http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=Text%2C+ntext%2C+and+image+parameters+can+be+used+as+OUTPUT+parameters&btnG=Google+Search

要读取Text类型变量的方法有很多,下面就罗列一些:

sqlserver不允许将BLOBs大数据类型赋值给本地变量,只能得到相应的指针,然后根据指针读取相关信息。

一般的做法都是使用SqlDataReader,详情请参考
http://www.microsoft.com/china/msdn/adonet.asp

如果您不想使用SqlDataReader,还是使用SqlHelper.ExecuteNonQuery,可以通过先取出数据的指针,然后根据指针再将数据读出来。详情请参考
【Conserving Resources When Writing BLOB Values to SQL Server】
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconservingresourceswhenwritingblobvaluestosqlserver.asp

另外 IMAGE 作为输出参数就没有问题,比如下面的存储过程:

CREATE Procedure OutputCoverByISBN
(@ISBNWanted VarChar(20),
  @CoverOut IMAGE OUTPUT)

as
SELECT @CoverOut=COVER FROM Covers WHERE ISBN = @ISBNWanted
SELECT ISBN, Version, FileName, @CoverOut Cover FROM Covers WHERE ISBN =
@ISBNWanted

GO

分享到:
评论

相关推荐

    delphi如何调用sql存储过程,并获取结果

    下面是一个完整的示例代码,展示了如何在Delphi中调用带有输出参数的存储过程,并显示结果: ```delphi procedure TForm1.Button1Click(Sender: TObject); var outCount: Integer; begin // 清除之前的参数 ...

    实验9 存储过程的创建和使用

    实验9主要围绕存储过程的创建、使用、查看、修改和删除等核心概念展开,这是数据库管理系统中的重要组成部分,尤其在SQL Server中具有广泛的应用。存储过程是一组预先编写的SQL语句,它允许用户像调用函数一样重复...

    存储过程扩展学习

    例子中的存储过程示例展示了如何创建和使用各种类型的参数: - 没有参数的存储过程,如`titles_1389`,用于查询特定出版商的书籍。 - 带有加密选项的存储过程`publish_pro`,隐藏了存储过程的内部逻辑。 - 带简单...

    深入学习存储过程--存储过程精解

    `text`、`ntext`和`image`类型也可作为输出参数。 - `n`:表示最多可以定义2100个参数。 - `{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}`:`RECOMPILE`指示每次执行时重新编译过程,以适应不同输入。`...

    存储过程初学实例

    ### 存储过程初学实例知识点详解 ... - `text`、`image`等大二进制数据类型不能作为输出参数。 通过上述内容的学习,初学者可以更好地理解存储过程的概念及其创建方法,从而在实际应用中更加灵活地运用这一强大特性。

    调用带参数的存储过程

    存储过程是预编译的SQL语句集合,它可以在数据库服务器上执行,并可以接收输入参数、返回输出参数以及返回结果集。通过创建和调试存储过程,开发者能够有效地提高应用程序的性能和安全性。 #### 创建带参数的存储...

    SQL Server 存储过程与实例

    而带有参数的存储过程创建语法则需要包括参数的定义,如数据类型、是否为输出参数及默认值。 5. **调用存储过程** 调用存储过程通常使用`EXEC`关键字,例如: ```sql EXEC pro_name @param1 = value1, @param2 ...

    存储过程案例存储过程案例.doc

    `COMPUTE`存储过程接收两个输入输出参数(NUM1, NUM2),计算它们的商和余数,然后更新输入参数的值。这展示了如何在存储过程中改变输入参数的值。 8. 查看过程源代码: 要查看存储过程的源代码,可以使用`SELECT ...

    存储过程的创建和使用.ppt

    2. **参数化**:存储过程可以接受输入参数,根据参数的不同执行不同的操作,还可以返回输出值。 3. **嵌套调用**:一个存储过程可以调用另一个存储过程,形成层级结构。 4. **状态返回**:存储过程可以向调用者返回...

    Java中调用SQL存储过程示例

    接着,我们创建一个CallableStatement对象,设置存储过程的输入参数和输出参数。在执行存储过程后,我们检查输出参数的值以确定操作是否成功。 请注意,处理`image`或`ntext`类型的字段时,可能需要特殊处理,因为...

    JSP存储过程过滤器用例

    1 用过滤器实现数据初始化 2 ...而采用LinkedHashMap即链表式的HashMap,是一种先进先出的存储数据方式,这里采用LinkedHashMap. 6 预编译SQL语句 7 带输入输出参数存储过程的使用 8 有关存储过程详细用法见...

    存储过程精解,主要将的存储过程的用法

    `FOR REPLICATION`选项用于创建在复制过程中使用的存储过程,这些过程不能在订阅服务器上直接执行。 5. **执行存储过程**:使用`EXECUTE`或`EXEC`语句调用存储过程,例如`EXEC procedure_name @param1=value1, @...

    存储过程基础

    - **@parameter**:这是存储过程中使用的参数。在创建存储过程时可以声明一个或多个参数,用户在执行存储过程时必须提供这些参数的值(除非已经定义了默认值)。一个存储过程最多可以有2100个参数。 - **data_type...

    SQL SERVER 存储过程学习笔记(摘自网络)

    - `@parameter`:存储过程的参数,每个参数都有数据类型、可能的默认值和是否为输出参数的标识。 - `data_type`:参数的数据类型,可以是SQL Server支持的所有数据类型,包括`text`, `ntext`, `image`等。 - `OUTPUT...

    sql存储过程PPT

    这个例子中,存储过程sp_Sum接收两个输入参数(@Num1和@Num2),计算它们的和,并将结果赋值给输出参数@Result。 系统存储过程如sp_databases、sp_helpdb、sp_renamedb等是SQL Server预先定义的,用于执行特定...

    C#执行SQL的存储过程

    通过上述步骤,我们可以在C#应用程序中调用SQL Server的存储过程,并处理其输入输出参数。这种方法不仅可以简化代码结构,还能有效提升程序性能。在实际应用中,可以根据具体需求调整连接字符串和存储过程的参数设置...

    MySQL存储过程入门学习

    3. **INOUT**:既是输入也是输出参数。 **示例**:创建一个存储过程,接受球员编号作为输入,并返回该球员的比赛获胜次数。 ```sql CREATE PROCEDURE get_wins(IN p_playerno INTEGER, OUT p_wins INTEGER) BEGIN ...

    利用存储过程将Excel中数据导入到数据库表中

    4. 数据库存储过程的创建和使用,包括参数传递和批量操作。 5. Java编程中的面向对象设计,如控制器和业务逻辑组件的分离。 确保整个流程的安全性也很重要,例如防止SQL注入、正确处理异常以及在操作完成后关闭所有...

    SQLSERVER存储过程大总结.doc

    SQL Server 存储过程是数据库管理系统中的一种重要功能...总之,SQL Server的存储过程是数据库开发中的重要工具,它们允许开发者创建可重复使用的、灵活的、高效的数据处理逻辑,有助于提升系统的整体性能和可维护性。

Global site tag (gtag.js) - Google Analytics