`
- 浏览:
1041352 次
- 性别:
- 来自:
北京
-
/**//*--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
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### SQL Server 2008 开发系列知识点详解 #### 一、索引新特点 在SQL Server 2008中,索引有了新的改进和特性,这其中包括了筛选索引的应用。筛选索引是一种特殊的非聚集索引,允许在创建索引时指定一个过滤条件,...
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); -- 解析参数并插入数据 ...
1、执行下述代码,查看当前进程执行内容 ...SET NOCOUNT ON SET SHOWPLAN ON SET NOEXEC ON GO 具体代码 GO SET NOCOUNT OFF SET SHOWPLAN OFF SET NOEXEC OFF GO 4、执行计划显示索引使用不合理导致全表扫
这个命令允许你禁止所有在你的会话事务中的子查询的信息,直到你发出 SET NOCOUNT OFF。这个选项不只在于其输出的装饰效果。它减少了从服务器端到客户端传递的信息量。因此,它帮助降低了网络通信量并提高了你的事务...
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 ...
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_...
`set nocount on`用于关闭自动返回受影响行数的功能,这样可以提高性能,因为某些操作可能不需要知道影响了多少行。 接下来,存储过程声明了一个局部变量`@P1`,它将作为游标的标识符。`sp_cursoropen`系统存储过程...
7. **禁用/启用NOCOUNT**:`SET NOCOUNT ON`和`SET NOCOUNT OFF`用于控制是否返回行数信息。 #### 六、总结 通过上述存储过程,我们实现了基于游标的SQL分页功能。这种方法不仅能够有效地管理大量数据,还具有较高...
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 ...
- `SET NOCOUNT ON` 和 `SET NOCOUNT OFF` 是为了控制是否返回行计数信息,这在实际应用中可以提高效率。 #### 2. `INSERT INTO SELECT FROM` `INSERT INTO SELECT FROM`语句则是在已存在的表中插入数据。这种...
SET NOCOUNT ON; DECLARE @sql NVARCHAR(MAX) = 'DELETE FROM xxx WHERE id IN (' + @idList + ')' EXEC sp_executesql @sql END ``` 在这个例子中,`@idList`应该是一个由逗号分隔的值列表,如'1,2,3,4'。调用...
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 ...
set nocount off --关闭SqlServer消息 --set nocount on --开启SqlServer消息 go create proc usp_getMyStudentsDataByPage --输入参数 @pagesize int=7,--每页记录条数 @pageindex int=1,--当前要查看第几页的记录 ...
这个例子里面我们从两个表中取出头两行,然后合并到一个表中。 在现实中我们常常会遇到这样的情况,... SET NOCOUNT ON --指示存储过程不返回查询影响的行数 DECLARE @col1c varchar(20),@col2c varchar(20), @inde
8. **`SET NOCOUNT ON`**:在存储过程中设置`SET NOCOUNT ON`会关闭查询结果集的计数,意味着`@@ROWCOUNT`将返回0。在需要精确控制行数的情况下,需要避免使用`SET NOCOUNT ON`或者在需要时手动重置。 9. **使用`...
SET NOCOUNT ON BEGIN SELECT * FROM dbo.userinfo END GO ``` #### 调用存储过程 调用存储过程的方式有多种,以下列举几种常见的调用方式。 ##### 1. 使用Command对象调用 在ASP中,可以使用`ADODB.Command`...
1. **使用SET NOCOUNT ON选项**: 当在存储过程中使用SELECT语句时,SQL Server默认会返回受影响的行数。通过设置SET NOCOUNT ON,可以关闭这个返回,减少不必要的网络通信,从而提高性能。 2. **使用确定的Schema...
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 ...
一种更高效的替代方案是在 `INSERT` 操作之前设置 `SET NOCOUNT ON` 并且在 `INSERT` 之后立即执行 `SELECT @@IDENTITY`,这样可以减少不必要的网络往返次数,并提高整体性能。 #### 示例代码: ```sql SET NOCOUNT...