2

我有一個項目需要我在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腳本。

+0

開始時你會說「開發2005年,部署到2000年」,但最後你會說「開發2000年,部署到2005年」。這是什麼? – 2010-08-24 23:25:19

+0

是的,你說得對。但它不應該影響我的問題的答案。 – 2010-08-30 00:19:05

回答

4

這對於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 
1

FWIW

select * from sysobjects where type = 'p' 

仍然工作在2008年SQL,所以我猜測,這仍最小公分母可以接受的。 DMV的無法獲得2000年

2

認爲

IF OBJECT_ID('your_sp_name') IS NOT NULL 

會告訴你,如果它是存在的,雖然我不能在2000年在莫測試...

1

你最好的選擇是staill的兼容性視圖,sysobectssyscolumns

請查看以下鏈接 http://msdn.microsoft.com/en-us/library/ms187376.aspx

早期的 版本的SQL Server的許多系統表現在是作爲一組視圖實現的 。這些 視圖被稱爲兼容性 視圖,它們僅用於後向 兼容性。兼容性 意見公開該 在SQL Server中可用相同的元數據2000

3

不要使用系統表:使用OBJECT_ID

我也使用ALTER部署,但使用CREATE保持源代碼控制。也就是說,我只使用差異部署腳本(使用ALTER),但與發佈後的源代碼管理文件夾相比較(作爲CREATE)

我有代碼歷史記錄和更簡單的部署:不需要刪除/創建全部特效。例如,如果你忘記了許可權呢?

我使用紅門/ SVN BTW

0

使用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 
0

在大多數情況下,我會嘗試在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標準版


來源:http://blog.sqlauthority.com/2007/03/07/sql-server-script-to-determine-which-version-of-sql-server-2000-2005-is-running/


一旦你確定版本,你可以執行適當的代碼級別。