禁用SQL2008结果集中的消息

时间:2009-02-06 13:10:33

标签: sql-server sql-server-2008 dataset messages

进一步问these two问题,是否有办法禁用可能与SQL2008中的结果集一起发送的消息?

(请注意,这与ANSI_WARNINGS设置无关。或NOCOUNT 。)

感谢您的帮助。

编辑:兼容性设置或表所有者不是问题。 这与NOCOUNT 无关。相信我。

5 个答案:

答案 0 :(得分:11)

不,没有办法禁用与结果集一起发送的所有消息。设置nocount on / off对这些类型的消息没有影响。

答案 1 :(得分:0)

无论如何,你需要在Sproc的主体中使用NOCOUNT(我很感激你已经测试过它有没有)

在这样的情况下,我得到Sproc的实际调用(来自我的APP中的Debug,或者使用SQL Profiler),然后将其插入到SSMS或您使用的任何IDE中,将其包装在ROLLBACK事务中(所以它不能不小心做出任何改变)。注意:使用与应用程序将使用的凭据相同的凭据,使用IDE登录到SQL Server。

BEGIN TRANSACTION
EXEC StaffEnquirySurnameSearch @searchterm = 'FOOBAR'
ROLLBACK

看看你得到了什么。使用TEXT模式进行输出,而不是可能隐藏某些内容的GRID模式

只是为了表明我认为如何将NOCOUNT添加到您的SProc中:

CREATE PROCEDURE StaffEnquirySurnameSearch
    @searchterm varchar(255)
AS

SET NOCOUNT ON

SELECT  AD.Name, AD.Company, AD.telephoneNumber, AD.manager, CVS.Position,
    CVS.CompanyArea, CVS.Location, CVS.Title, AD.guid AS guid,
    AD.firstname, AD.surname
FROM ADCVS AD
LEFT OUTER JOIN CVS ON
    AD.Guid=CVS.Guid 
WHERE AD.SurName LIKE @searchterm
ORDER BY AD.Surname, AD.Firstname
GO

我注意到你没有为表添加数据库所有者(最常见的是“dbo”)前缀,这可能意味着任何人都拥有其他副本,并且从应用程序权限角度来看它们是默认的,尽管我认为这不会改变SQL版本之间的结果集,但是,同样的事情适用于Sproc的所有权,并且您可能会调用一些早期版本,为不同的所有者创建。

同样你的Sproc名称在你的ASP.NET代码中定义(我在链接的问题中似乎找不到)也应该定义所有者,即

EXEC dbo.StaffEnquirySurnameSearch @searchterm = 'FOOBAR'

答案 2 :(得分:0)

从SQL 2000升级到2008时,您是否更改了兼容级别?如果它是某种向后兼容性警告消息可能会治愈它。

答案 3 :(得分:0)

您是否尝试在没有“OR”的情况下运行相同的CONTAINS查询?

即:

SELECT * FROM my_table
WHERE CONTAINS(my_column, 'a monkey')  -- "a" is a noise word

而不是

SELECT * FROM my_table
WHERE CONTAINS(my_column, 'a OR monkey')  -- "a" is a noise word

答案 4 :(得分:0)

你可以把它包装成试试捕获......在线书籍中的更多信息

例如:

CREATE TABLE Test_ShortString(

ShortString varchar(10) NULL

开始尝试

insert into 
Test_ShortString (ShortString) 
values ('123456789012345')

结束尝试

开始捕捉

--Select Error_Number() as ErrorNumber

结束捕获