SQL Server 2005 降轉到 SQL Server 2000
出自ProgWiki
目錄 |
SQL Server 2005 降轉到 SQL Server 2000
在函數內非法使用 getdate()
- 起因:
- SQL Server 2005 可以在預存程序或預存函數裡, 可以直接使用 getdate() ,
可是在SQL Server 2000卻會變成在函數內非法使用 getdate()
- SQL Server 2005 可以在預存程序或預存函數裡, 可以直接使用 getdate() ,
- 解法
- 使用View取得getdate()的值
-- 物件: View [dbo].[v_getdate] SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[v_getdate]') AND OBJECTPROPERTY(id, N'IsView') = 1) EXEC dbo.SP_EXECUTESQL @STATEMENT = N'create view [dbo].[v_getdate] as select date=getdate() ' GO -- 物件: UserDefinedFunction [dbo].[getdate2] SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[getdate2]') AND xtype in (N'FN', N'IF', N'TF')) BEGIN EXECUTE dbo.SP_EXECUTESQL @STATEMENT = N' CREATE FUNCTION [dbo].[getdate2] () RETURNS datetime AS BEGIN declare @today datetime select @today = date from v_getdate return @today END ' END GO
- 在預存程序或預存函數裡, 使用 @time_now 來取代 getdate()
DECLARE @time_now AS DATETIME; SET @time_now = [dbo].[getdate2]();
varchar(max) 與 nvarchar(max)
- 用 varchar(8000) 取代 varchar(max)
- 用 nvarchar(4000) 來取代 nvarchar(max)
最大資料列的大小超過8060Byte
- 起因:
警告: 雖已建立資料表,但其最大資料列的大小已超過單列所允許的最大位元組數目 (8060)。如果在此資料表中 INSERT 或 UPDATE 資料行而會導致資料列長度超過 8060 位元組時,則會導致 INSERT 或 UPDATE 失敗。
- 解法:
- 目前無比較好的解法, 只有把單筆的資料砍短一點了...
rank 為無法識別的 函數名稱
- rank 為 MS-SQL 2005以後才有的T-SQL語法,主要用於資料分頁時使用。故需改寫成使用SQL夾擠式分頁方式。