SQL Server 2000 から SQL Server 2008、次に SQL Server 2012 へのアップグレードを開始しています (2000 から 2012 に直接移行することはできません)。
SQL Server 2000 のストアド プロシージャの 1 つは、指定された値であるビュー@ErrorMsg
から name 列にの値を設定します。これらの目的のために、ビューに存在する名前を探しているとしましょう。sys.objects
name
zz_BICWS_PersonInfo_Search_1000000000000000000
sys.objects
プロシージャは SQL Server 2000 で機能し、SQL Server 2012 で次のコードを実行すると、正しい名前が返されますが、SQL Server 2012 のストアド プロシージャでは返されません。
declare @ErrorMsg varchar(1000)
set @ErrorMsg = 'xxxxxxx'
select @ErrorMsg = name
from bic.dbo.sysobjects
Where name = 'zz_BICWS_PersonInfo_Search_10000000000000000000'
print 'test ' + @ErrorMsg
これらと同じ行がストアド プロシージャに存在しますが、print 行を除いて、@ErrorMsg
プロシージャを呼び出すアプリに出力されます。ただしxxxxxx
、アプリのメッセージ ボックスを使用して初期値を返し、戻り値を表示します。
しかし、where句を次のように変更すると
Where name Like ‘zz_BICWS_PersonInfo_Search_%’
(これに一致する行は約 40 行あります) 次に、見つかった最初の行の名前を取得します。