【问题标题】:Disable messages in SQL2008 result set禁用 SQL2008 结果集中的消息
【发布时间】:2010-10-05 22:25:30
【问题描述】:

关于thesetwo 的问题,有没有办法禁用可能与SQL2008 中的结果集一起发送的消息?

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

感谢您的帮助。

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

【问题讨论】:

  • 这些会是类似弃用功能警告的消息吗?我还没有找到禁用这些的方法。
  • 我想是的。一个是关于截断数据的警告,另一个是全文搜索包含干扰词。
  • 您在 IDE 中运行 SProc 时看到了哪些消息?
  • 看看你上面的评论!
  • 我希望您能告诉我在您的 IDE 中运行时的确切消息,届时可能会有所帮助。

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


【解决方案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
          

          结束捕获

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-12-04
            • 2021-04-29
            • 1970-01-01
            • 2019-06-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多