除了这 两个问题,有没有办法禁用可能与 SQL2008 中的结果集一起发送的消息?
(请注意,这与 ANSI_WARNINGS 设置无关。或 NOCOUNT。)
谢谢你的帮助。
编辑:兼容性设置或表所有者不是问题。这与 NOCOUNT 无关。相信我。
不,没有办法禁用与结果集一起发送的所有消息。设置 nocount on/off 对这些类型的消息没有影响。
无论如何,您都需要在 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'
从 SQL 2000 升级到 2008 时是否更改了兼容级别?如果它是某种可能治愈它的向后兼容性警告消息。
您是否尝试过不使用“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
您可以将其包装在 try catch... 在线书籍中的更多信息
例如:
创建表 Test_ShortString(
ShortString varchar(10) NULL
)
开始尝试
insert into
Test_ShortString (ShortString)
values ('123456789012345')
结束尝试
开始抓
--Select Error_Number() as ErrorNumber
结束捕获