`
zu14
  • 浏览: 446419 次
  • 性别: 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

分享到:
评论

相关推荐

    JSP存储过程过滤器用例

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

    如何将图片转换成二进制存储

    参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite) public void WritePhoto(byte[] streamByte) { // Response.ContentType 的默认值为默认值为“text/html” ...

    sqlserver存储过程

    ----------------------------------------带输出参数存储过程--------------------------------------- if (object_id('proc_getUsersRecord', 'P') is not null) drop proc proc_getUsersRecord go create proc ...

    BCP详细参数.txt

    可以使用 SQL Server 企业管理器(或 sp_configure 系统存储过程)设置服务器配置选项。但是,使用此选项可以单个地替代服务器配置选项。packet_size 可以设置为 4096 到 65535 字节,默认值为 4096。 数据包大小的...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    我们发现EXEC 执行存储过程和我们平时程序执行一个方法是几乎一样的,返回值参数 直接就可以等于存储过程的执行后的返回值,输出参数 在后面需要增加 OUTPUT 关键字。 执行存储过程不是重点,重点是执行动态sql语句...

    constant_listener:在后台收听语音,并使用 Google 的 Speech-to-Text API 输出文本

    恒定的倾听者该存储库是作为家庭自动化系统的实用程序创建的。 它在后台侦听,并使用 Speech-to-Text API 提供通过队列所说的文本。 背景噪声水平根据过去 30 秒的数据进行校准,以启用动态功率阈值。 初始化: 选择...

    JAVA_API1.6文档(中文)

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    SQLHelper.cs

    _ CONN_STRING, sql) storedParams(0).Value = 2 storedParams(1).Value = 3 在命令中使用参数 Dim ds As DataSet ds = SqlHelper.ExecuteDataset(CONN_STRING, _ CommandType.Text, _ sql, storedParams) [C#] // ...

    .net数据访问类 SQL Helper 类

    这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。 ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。 ExecuteDataset。此方法返回 DataSet 对象,该...

    SQL sever 实训

    --创建存储过程P_Sale3,能够根据指定的产品编号和日期,以输出参数的形式得到该产品的销售金额 CREATE PROCEDURE P_Sale3 @ProNo nvarchar(5),@SaleDate DateTime,@MONEY Decimal(8,2)OUTPUT AS SET @MONEY=( ...

    c# 加密和解密相关代码

    现在来了解一下使用“异或”加密或解密的执行过程,数值23 转换为二进制为10111,加密数字的数值15 转换为二进制为1111。对比两个二进制的值,从右向左按位对比,如果两个二进制数的相应位都为1 或两个二 进制数的...

    在C++程序中使用QML

    在C++程序中使用QML QML API是分为三个主类——QDeclarativeEngine, QdeclarativeComponent 与 QDeclarativeContext。QDeclarativeEngine 提供QML运行的环境,QdeclarativeComponent 封装了QML Documents 与...

    Visual C++ 2005入门经典--源代码及课后练习答案

    7.4.4 在构造函数中使用初始化列表 320 7.5 类的私有成员 320 7.5.1 访问私有类成员 323 7.5.2 类的友元函数 324 7.5.3 默认复制构造函数 326 7.6 this指针 328 7.7 类的const对象 331 7.7.1 类的...

    中文简体压缩软件RAR 6.0

    (存储在 HOME 环境变量中) Windows 的版本 RAR 从 rar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录中。 这个文件包含下列字符串: 开关=<任何 RAR 开关,用空格分开> 环境变量 ...

    WinRAR_4.0.exe

    (存储在 HOME 环境变量中) Windows 的版本 RAR 从 rar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录中。 这个文件包含下列字符串: switches=任何 RAR 开关,用空格分开 例如: switches=-...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    Visual C++ 2005入门经典.pdf(整理并添加所有书签) ...22.4 在无约束模式中使用DataGridView控件 22.5 定制DataGridView控件 22.5.1 定制题头单元格 22.5.2 定制非题头单元格 22.5.3 动态设置单元格样式...

    MySQL 5.1参考手册

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1....

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    Visual C++ 2005入门经典.pdf(整理并添加所有书签) ...22.4 在无约束模式中使用DataGridView控件 22.5 定制DataGridView控件 22.5.1 定制题头单元格 22.5.2 定制非题头单元格 22.5.3 动态设置单元格样式...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    Visual C++ 2005入门经典.pdf(整理并添加所有书签) ...22.4 在无约束模式中使用DataGridView控件 22.5 定制DataGridView控件 22.5.1 定制题头单元格 22.5.2 定制非题头单元格 22.5.3 动态设置单元格样式...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    Visual C++ 2005入门经典.pdf(整理并添加所有书签) ...22.4 在无约束模式中使用DataGridView控件 22.5 定制DataGridView控件 22.5.1 定制题头单元格 22.5.2 定制非题头单元格 22.5.3 动态设置单元格样式...

Global site tag (gtag.js) - Google Analytics