【升级】升级到3.6出现对象名’xxxx’无效
问题:在升级到3.6时,特别是从低版本一步步升过来时,出现对象名无效的情况应该怎么解决呢?
回答:首先看这个对象名是数据库表、字段还是存储过程。确定对象的位置。我们拿对象名 'dbo.PR_Shop_OrderItem_UpdateByProductId' 无效做例子:
可以拿SF3.6安装包中的数据库脚本创建一个数据库,然后找到 'dbo.PR_Shop_OrderItem_UpdateByProductId'的位置,发现是一个存储过程。
由于网站的存储过程创建都在App_Data下SQLServerSchema2005.sql这个脚本里:
打开这个文件(用记事本就可以),然后搜索PR_Shop_OrderItem_UpdateByProductId会得到两段代码:
一:
/****** Object: StoredProcedure [dbo].[PR_Shop_OrderItem_UpdateByProductId] Script Date: 09/15/2010 11:00:17 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PR_Shop_OrderItem_UpdateByProductId]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[PR_Shop_OrderItem_UpdateByProductId]
GO
二:
/****** Object: StoredProcedure [dbo].[PR_Shop_OrderItem_UpdateByProductId] Script Date: 09/15/2010 11:00:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PR_Shop_OrderItem_UpdateByProductId]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[PR_Shop_OrderItem_UpdateByProductId]
(
@ProductId INT ,
@ProductName NVARCHAR(255)
)
AS
UPDATE PE_ORDERITEM
SET productname = @productname
WHERE productid = @productid'
END
GO
把这两段代码复制到一起,到数据库中运行这个脚本:
执行代码成功,然后再升级一次。