これらの 2つの質問に加えて、SQL2008の結果セットと一緒に送信される可能性のあるメッセージを無効にする方法はありますか?
(これはANSI_WARNINGS設定とは関係がないことに注意してください。またはNOCOUNT。)
助けてくれてありがとう。
編集:互換性設定やテーブル所有者の問題ではありません。そして、それはNOCOUNTとは何の関係もありません。私を信じて。
いいえ、結果セットと共に送信されるすべてのメッセージを無効にする方法はありません。nocount のオン/オフを設定しても、これらの種類のメッセージには影響しません。
「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
とにかく、Sproc の本体に NOCOUNT が必要です (Sproc の有無にかかわらずテストしていただきありがとうございます)。
このような状況では、Sproc への実際の呼び出しを (APP のデバッグから、または SQL プロファイラーを使用して) 取得し、それを SSMS または使用する IDE にプラグインして、ROLLBACK トランザクションでラップします (そのため、誤って変更を加えます)。注: アプリが使用するのと同じ資格情報を使用して、IDE で SQL Server にログオンします。
BEGIN TRANSACTION
EXEC StaffEnquirySurnameSearch @searchterm = 'FOOBAR'
ROLLBACK
そして何が得られるか見てください。何かを隠す可能性のある GRID モードではなく、出力に TEXT モードを使用する
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 にアップグレードしたときに、互換性レベルを変更しましたか? それが何らかの下位互換性警告メッセージである場合、それを解決できる可能性があります。
あなたはそれをtry catchでラップすることができます... 詳細はオンラインの本で
例えば:
CREATE TABLE Test_ShortString(
ShortString varchar(10) NULL
)
開始してみる
insert into
Test_ShortString (ShortString)
values ('123456789012345')
エンドトライ
キャッチ開始
--Select Error_Number() as ErrorNumber
エンドキャッチ