进一步问these two问题,是否有办法禁用可能与SQL2008中的结果集一起发送的消息?
(请注意,这与ANSI_WARNINGS设置无关。或NOCOUNT 。)
感谢您的帮助。
编辑:兼容性设置或表所有者不是问题。 这与NOCOUNT 无关。相信我。
答案 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
结束捕获