2013-07-30 44 views
2

我想獲得一些遺留的SQL 2005代碼在SQL 2012 Express上工作。但是,每當我設置compatibility_level to 90時,我嘗試使用較舊的數據類型時出錯。從理論上來說,下面的代碼應該工作:不能使用LONG數據類型

USE wsus_results 
GO 

ALTER DATABASE wsus_results 
SET compatibility_level = 90 
GO 

CREATE TABLE ScTable (
TblName VARCHAR(255) NULL, 
TblType VARCHAR(255) NULL, 
FieldCnt INTEGER NULL, 
RecordCnt LONG NULL, 
Description LONGVARCHAR NULL, 
TblId AUTOINCREMENT PRIMARY KEY) 
GO 

不過,我得到以下錯誤:

Msg 2715, Level 16, State 6, Line 2 Column, parameter, or variable #4: Cannot find data type LONG.

我敢肯定有一些簡單的我失蹤了,我只需要輕推中正確的方向。這不是一個許可問題,據我所知,SET compatibility_level = 90執行正常,沒有錯誤。不過,使用LONG時出現錯誤。

回答

12

LONG在任何版本的SQL Server中都不是有效的數據類型。並且更改兼容級別不會影響您使用舊數據類型或新數據類型的能力。這隻影響某些語言結構的解析方式。

也許你的意思是DECIMALBIGINT

而爲了搶先進一步的問題:LONGVARCHARAUTOINCREMENT也不是有效的數據類型(check the documentation instead of guessing)。你從哪裏得到這個腳本,誰建議它應該在SQL Server中工作?我想你可能已經被惡作劇了。試試這個:

USE wsus_results; 
GO 

ALTER DATABASE wsus_results 
SET compatibility_level = 110; 
GO 

CREATE TABLE dbo.ScTable -- schema prefix is important! 
(
TblName  VARCHAR(255), 
TblType  VARCHAR(255), 
FieldCnt INT, 
RecordCnt BIGINT, 
Description VARCHAR(MAX), 
TblId  INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
); 
GO 

另外,表中的其他列是否真的可以爲空?你的表名是否真的需要後綴TableSc是什麼意思?爲什麼不實際稱它爲代表的表格(如SocialCowsScientificCholesterol)而不是混淆名稱並添加一個無意義的後綴以導致更多的輸入?

+0

什麼RMDBS使用'LONG'? 「CREATE TABLE」語句在未修改的地方工作。原諒我和我的缺陷,但是這段代碼落在了我的腿上,而且我也沒有必須在SQL幾年內惹上麻煩。我在想這應該是和'.mdb'文件。 –

+0

@hydroparadise看起來像可能用於Access,但肯定不適用於SQL Server。 –

相關問題