【发布时间】:2012-08-04 21:32:32
【问题描述】:
我们开始从 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 行与此匹配)然后我将获取找到的第一行的名称。
【问题讨论】:
-
那么,您是否在 SQL 2012 中实现了完全相同的功能,却没有得到您期望的结果?基于这句话
These same lines exist in a stored procedure, except the print line让我想知道。 -
你有没有考虑过调用存储过程时,对象不存在?
标签: sql-server-2008 stored-procedures sql-server-2000 sql-server-2012