我们开始从 SQL Server 2000 升级到 SQL Server 2008,然后是 SQL Server 2012(我们不能直接从 2000 升级到 2012)。
SQL Server 2000 中的存储过程之一将给定值所在的视图中的值设置@ErrorMsg
为名称列。出于这些目的,假设我正在寻找视图中确实存在的名称。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
这些相同的行存在于存储过程中,除了打印行,@ErrorMsg
输出到调用该过程的应用程序。但它xxxxxx
使用应用程序中的消息框返回初始值以显示返回值。
但是,如果我将 where 子句更改为
Where name Like ‘zz_BICWS_PersonInfo_Search_%’
(大约有 40 行与此匹配)然后我将获得找到的第一行的名称。