如何以SQL 2000 + SQL 2005兼容方式删除存储过程?
我有一个项目需要我在SQL Server 2005中进行开发,但部署到SQL Server 2000框。如何以SQL 2000 + SQL 2005兼容方式删除存储过程?
对于99%的SQL代码,我没有问题,一切似乎都是向后兼容的。
现在我正要开始将所有存储过程(SP)添加到源代码管理,并且我喜欢每次执行查询时执行drop-add的想法。 I.E.如果SP已经存在,先放下它。然后创建/重新创建SP。
如何在单个脚本中以与SQL 2000和SQL 2005兼容的方式执行此操作,以便在开发(2000)和生产(2005)期间我的脚本可以正常工作?我相信语法略有不同,并且SP元数据存储在不同的系统表中。
请协助工作的SQL脚本。
这对于SQL 2000和SQL 2005都适用。我已经对它进行了测试。
USE databasename
GO
IF object_id('schema.StoredProcedureName') IS NOT NULL
DROP PROCEDURE schema.StoredProcedureName
GO
CREATE PROCEDURE schema.StoredProcedureName
.. your code
FWIW
select * from sysobjects where type = 'p'
仍然工作在2008年SQL,所以我猜测,这仍最小公分母可以接受的。 DMV的无法获得2000年
我认为
IF OBJECT_ID('your_sp_name') IS NOT NULL
会告诉你,如果它是存在的,虽然我不能在2000年在莫测试...
你最好的选择是staill的兼容性视图,sysobects
,syscolumns
等
请查看以下链接 http://msdn.microsoft.com/en-us/library/ms187376.aspx
早期的 版本的SQL Server的许多系统表现在是作为一组视图实现的 。这些 视图被称为兼容性 视图,它们仅用于后向 兼容性。兼容性 意见公开该 在SQL Server中可用相同的元数据2000
在我看来,你重新创建的所有存储过程与尊重sys.sp_refreshsqlmodule
如果我老的答案I'm looking for a reliable way to verify T-SQL stored procedures. Anybody got one?描述等。 STORED PROCEDURE的代码将再次被验证,包括关闭依赖关系。
不要使用系统表:使用OBJECT_ID
我也使用ALTER部署,但使用CREATE保持源代码控制。也就是说,我只使用差异部署脚本(使用ALTER),但与发布后的源代码管理文件夹相比较(作为CREATE)
我有代码历史记录和更简单的部署:不需要删除/创建全部特效。例如,如果你忘记了许可权呢?
我使用红门/ SVN BTW
使用INFORMATION_SCHEMA.ROUTINES视图应该在SQL Server 2000中,2005年的工作和2008唯一的缺点是,视图不再确定对象的架构的一种可行的手段。
但是,如果这不是一个问题,尝试这样的脚本:
USE YourDB
GO
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'usp_test'
) DROP PROCEDURE usp_test
GO
CREATE PROCEDURE usp_test AS
SELECT 1 AS val
GO
EXEC usp_test
GO
在大多数情况下,我会尝试在2005箱运行SQL2000 TSQL,因为我希望它是很大程度上向后兼容。也就是说,你应该完成升级你的产品盒,以便你可以使用更新的TSQL。
如果找不到版本之间的兼容性,可以先检测版本。
要确定2000/2005所运行的SQL Server的版本,请使用查询分析器连接到SQL Server 2000/2005,然后运行下面的代码:
SELECT
SERVERPROPERTY('productversion'),
SERVERPROPERTY ('productlevel'),
SERVERPROPERTY ('edition')
的结果是: 产品版本(例如,8.00.534)。 产品级别(例如“RTM”或“SP2”)。 该版本(例如,“标准版”)。
例如,结果看起来类似: 8.00.534 RTM标准版
一旦你确定版本,你可以执行适当的代码级别。
开始时你会说“开发2005年,部署到2000年”,但最后你会说“开发2000年,部署到2005年”。这是什么? – 2010-08-24 23:25:19
是的,你说得对。但它不应该影响我的问题的答案。 – 2010-08-30 00:19:05