4

除了 两个问题,有没有办法禁用可能与 SQL2008 中的结果集一起发送的消息?

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

谢谢你的帮助。

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

4

5 回答 5

14

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

于 2009-02-21T18:01:24.957 回答
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'
于 2009-02-17T13:08:03.883 回答
0

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

于 2009-02-17T13:14:59.810 回答
0

您是否尝试过不使用“OR”运行相同的 CONTAINS 查询?

IE:

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
于 2009-02-23T23:15:12.847 回答
0

您可以将其包装在 try catch... 在线书籍中的更多信息

例如:

创建表 Test_ShortString(

ShortString varchar(10) NULL

)

开始尝试

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

结束尝试

开始抓

--Select Error_Number() as ErrorNumber

结束捕获

于 2009-02-24T04:05:42.943 回答