私は次のコードを持っている:SET NOEXEC ONはどのように機能しますか?
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
-- print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
set noexec off
-- end of code
は、そのテーブル「tblfoobar」はデータベースに存在しませんのでご注意ください。私がONにNOEXECを設定すると、メッセージの「メッセージ208」の部分を与えないかもしれないことを期待していた
Please update your DB to version 5 before running this script. Msg 208, Level 16, State 1, Line 1 Invalid object name 'tblFooBar'.
:私はこのコードを実行すると、メッセージがアップします。
"set noexec on"はコードをコンパイルして実行しません。存在しないテーブルに何かを挿入しようとすると、コンパイル時エラーとなります - 私は推測しています。その場合、「欠落しているオブジェクト」に関するエラーが表示されます。
ここで私が観察した奇妙な振る舞いを教えてください。 「 - 印刷 『ダミー』」私は行からコメントを削除した場合
-- start of code
set noexec off
declare @requiredVersion int
declare @currentVersion int
set @requiredVersion = 5
set @currentVersion = 4
if (@currentVersion < @requiredVersion)
begin
print 'Please update your DB to version 5 before running this script.'
set noexec on
end
go
print 'Dummy'
insert into tblFooBar(name) values ('AAA')
go
とのコードを実行、私は、次のメッセージが表示されます。
このスクリプトを実行する前に、DBをバージョン5に更新してください。
今回は、不足しているテーブルに関するメッセージはありません。
誰かがこの現象を私に説明できますか?ありがとう。
私たちが同じページにいることを確認するだけです。これはSQL Server用ですか?どのバージョン? –
申し訳ありませんが、私はそれを言及すべきでした。私はMS SQL 2000を使ってこのコードを試してみました。 – ahmjt
SQL 2005で同じ動作が見られます –