禁用 SQL2008 结果集中的消息
Posted
技术标签:
【中文标题】禁用 SQL2008 结果集中的消息【英文标题】:Disable messages in SQL2008 result set 【发布时间】:2010-10-05 22:25:30 【问题描述】:关于thesetwo 的问题,有没有办法禁用可能与SQL2008 中的结果集一起发送的消息?
(请注意,这与 ANSI_WARNINGS 设置无关。或 NOCOUNT。)
感谢您的帮助。
编辑:兼容性设置或表所有者没有问题。 这与 NOCOUNT 无关。相信我。
【问题讨论】:
这些会是类似弃用功能警告的消息吗?我还没有找到禁用这些的方法。 我想是的。一个是关于截断数据的警告,另一个是全文搜索包含干扰词。 您在 IDE 中运行 SProc 时看到了哪些消息? 看看你上面的评论! 我希望您能告诉我在您的 IDE 中运行时的确切消息,届时可能会有所帮助。 【参考方案1】:不,没有办法禁用与结果集一起发送的所有消息。设置 nocount on/off 对这些类型的消息没有影响。
【讨论】:
【参考方案2】:无论如何,您都需要在 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 的所有权,您可能会调用一些较早的版本,为不同的所有者创建。
在您的 ASP.NET 代码中定义 Sproc 名称的地方(我似乎在您的链接问题中找不到)也应该定义所有者,即
EXEC dbo.StaffEnquirySurnameSearch @searchterm = 'FOOBAR'
【讨论】:
【参考方案3】:您从 SQL 2000 升级到 2008 时是否更改了兼容性级别?如果是某种向后兼容性警告消息可能会治愈它。
【讨论】:
【参考方案4】:您是否尝试过不使用“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
【讨论】:
【参考方案5】:您可以将其包装在 try catch...更多信息在线书籍中
例如:
创建表 Test_ShortString(
ShortString varchar(10) NULL
)
开始尝试
insert into
Test_ShortString (ShortString)
values ('123456789012345')
结束尝试
开始抓
--Select Error_Number() as ErrorNumber
结束捕获
【讨论】:
以上是关于禁用 SQL2008 结果集中的消息的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个结果集中列出 SQL Server 中所有数据库中的所有表?
Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)