`
javayestome
  • 浏览: 1041361 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SET NOCOUNT 的怪问题

阅读更多
/**//*--SETNOCOUNT的问题

SQL版本:SQLServer20053159

故障描述:
当满足下述条件时,SETNOCOUNT导致TRY...CATCH无法正确处理错误
1.使用EXEC(<SQl>)AT<LinkedServer>或者EXEC<LinkedServer>.<databasename>.dbo.sp_executesql<SQl>
2.<SQL>中包括输出参数
3.<SQL>中包括SETNOCOUNTON和USE<DatabaseName>语句(注意不能更换出现次序)

具体的参考下面的测试示例

与此问题相关的帖子:
http://topic.csdn.net/u/20080103/12/3dafc07c-3376-40c1-b4bd-7cbd76afed1a.html?seed=182508736
--
*/

--添加链接服务器
EXECsp_addlinkedserver'srv_lnk','','SQLOLEDB','.'
EXECsp_serveroption'srv_lnk','rpcout','true'
GO

--测试语句
--
SETNOCOUNTON
BEGINTRY
DECLARE
@error_numberint,
@error_messagenvarchar(2048)

EXEC(N'
SETNOCOUNTON

USEtempdb

BEGINTRY
DELETEFROM[NEWID()]
ENDTRY
BEGINCATCH
SELECT
?=ERROR_NUMBER(),
?=ERROR_MESSAGE()
ENDCATCH
',
@error_numberOUTPUT,
@error_messageOUTPUT
)ATsrv_lnk
ENDTRY
BEGINCATCH
SELECT
2,
ERROR_NUMBER(),
ERROR_MESSAGE()
ENDCATCH
GO

--删除链接服务器
EXECsp_dropserver'srv_lnk','droplogins'
GO
分享到:
评论

相关推荐

    SQL SERVER 2008 开发系列

    ### SQL Server 2008 开发系列知识点详解 #### 一、索引新特点 在SQL Server 2008中,索引有了新的改进和特性,这其中包括了筛选索引的应用。筛选索引是一种特殊的非聚集索引,允许在创建索引时指定一个过滤条件,...

    关于sqlserver存储过程中单个或批量数据的增加、删除、修改操作方法.pdf

    SET NOCOUNT ON; DECLARE @EditType NVARCHAR(100); SET @EditType = 'ADD'; DECLARE @ForNum INT; SET @ForNum = 1; DECLARE @L_id NVARCHAR(50), @L_name NVARCHAR(50); -- 解析参数并插入数据 ...

    sybase sql执行慢,如何调优

    1、执行下述代码,查看当前进程执行内容 ...SET NOCOUNT ON SET SHOWPLAN ON SET NOEXEC ON GO 具体代码 GO SET NOCOUNT OFF SET SHOWPLAN OFF SET NOEXEC OFF GO 4、执行计划显示索引使用不合理导致全表扫

    SQL语句调优

    这个命令允许你禁止所有在你的会话事务中的子查询的信息,直到你发出 SET NOCOUNT OFF。这个选项不只在于其输出的装饰效果。它减少了从服务器端到客户端传递的信息量。因此,它帮助降低了网络通信量并提高了你的事务...

    SQL Server 2005分页显示存储过程

    SET NOCOUNT ON; DECLARE @timediff DATETIME; DECLARE @sql NVARCHAR(500); SELECT @timediff = GETDATE(); SET @sql = 'SELECT TOP ' + STR(@pageSize) + ' * FROM tb_TestTable WHERE (ID NOT IN (SELECT ...

    优化SQL Server的内存占用之执行缓存

    SET NOCOUNT ON DECLARE @i INT, @count INT, @sql nvarchar(4000) SET @i = 20000 WHILE @i BEGIN SET @sql = 'SELECT @count=count(*) FROM P_Order WHERE MobileNo = ' + cast( @i as varchar(10) ) EXEC sp_...

    计算机等考三级数据库基础:一个游标的sqlserver存储过程.docx

    `set nocount on`用于关闭自动返回受影响行数的功能,这样可以提高性能,因为某些操作可能不需要知道影响了多少行。 接下来,存储过程声明了一个局部变量`@P1`,它将作为游标的标识符。`sp_cursoropen`系统存储过程...

    sql分页

    7. **禁用/启用NOCOUNT**:`SET NOCOUNT ON`和`SET NOCOUNT OFF`用于控制是否返回行数信息。 #### 六、总结 通过上述存储过程,我们实现了基于游标的SQL分页功能。这种方法不仅能够有效地管理大量数据,还具有较高...

    instead of 触发器

    SET NOCOUNT ON IF (NOT EXISTS (SELECT P.SSN FROM Person P, inserted I WHERE P.SSN = I.SSN)) INSERT INTO Person SELECT SSN,Name,Address,Birthdate,Comment FROM inserted ELSE INSERT INTO ...

    select into和insert into select使用方法

    - `SET NOCOUNT ON` 和 `SET NOCOUNT OFF` 是为了控制是否返回行计数信息,这在实际应用中可以提高效率。 #### 2. `INSERT INTO SELECT FROM` `INSERT INTO SELECT FROM`语句则是在已存在的表中插入数据。这种...

    sqlserver的存储过程与 where in 多值参数

    SET NOCOUNT ON; DECLARE @sql NVARCHAR(MAX) = 'DELETE FROM xxx WHERE id IN (' + @idList + ')' EXEC sp_executesql @sql END ``` 在这个例子中,`@idList`应该是一个由逗号分隔的值列表,如'1,2,3,4'。调用...

    SQL Server数据库中处理空值时常见问题

    SET NOCOUNT ON GO CREATE TABLE xCount(pkey1 INT IDENTITY NOT NULL CONSTRAINT pk_xCount PRIMARY KEY, Col1 int NULL) GO INSERT xCount (Col1) VALUES (10) GO INSERT xCount (Col1) VALUES (15) GO INSERT ...

    分页存储过程

    4. **控制计数**:使用`SET NOCOUNT ON`和`SET NOCOUNT OFF`来控制执行SQL语句时是否显示计数消息,从而优化性能。 #### 四、代码解析 下面对存储过程中的关键代码进行详细解释: 1. **参数设置**: ```sql ...

    ADO调用分页查询存储过程的实例讲解

    set nocount off --关闭SqlServer消息 --set nocount on --开启SqlServer消息 go create proc usp_getMyStudentsDataByPage --输入参数 @pagesize int=7,--每页记录条数 @pageindex int=1,--当前要查看第几页的记录 ...

    在MySQL中同时查找两张表中的数据的示例

    这个例子里面我们从两个表中取出头两行,然后合并到一个表中。  在现实中我们常常会遇到这样的情况,... SET NOCOUNT ON --指示存储过程不返回查询影响的行数 DECLARE @col1c varchar(20),@col2c varchar(20), @inde

    sql优化处理

    8. **`SET NOCOUNT ON`**:在存储过程中设置`SET NOCOUNT ON`会关闭查询结果集的计数,意味着`@@ROWCOUNT`将返回0。在需要精确控制行数的情况下,需要避免使用`SET NOCOUNT ON`或者在需要时手动重置。 9. **使用`...

    asp中存储过程的编写和应用

    SET NOCOUNT ON BEGIN SELECT * FROM dbo.userinfo END GO ``` #### 调用存储过程 调用存储过程的方式有多种,以下列举几种常见的调用方式。 ##### 1. 使用Command对象调用 在ASP中,可以使用`ADODB.Command`...

    SQL Server 优化存储过程的七种方法.doc

    1. **使用SET NOCOUNT ON选项**: 当在存储过程中使用SELECT语句时,SQL Server默认会返回受影响的行数。通过设置SET NOCOUNT ON,可以关闭这个返回,减少不必要的网络通信,从而提高性能。 2. **使用确定的Schema...

    浅谈基于SQL Server分页存储过程五种方法及性能比较

    SET NOCOUNT ON; DECLARE @timediff DATETIME; -- 耗时 DECLARE @sql NVARCHAR(500); SELECT @timediff = GETDATE(); SET @sql = 'SELECT TOP ' + STR(@pageSize) + ' * FROM tb_TestTable WHERE (ID NOT IN ...

    五种提高 SQL 性能的方法

    一种更高效的替代方案是在 `INSERT` 操作之前设置 `SET NOCOUNT ON` 并且在 `INSERT` 之后立即执行 `SELECT @@IDENTITY`,这样可以减少不必要的网络往返次数,并提高整体性能。 #### 示例代码: ```sql SET NOCOUNT...

Global site tag (gtag.js) - Google Analytics