2010-10-18 122 views
0

我在表中有一個字段,我想要存儲一個可能長的錯誤字符串。爲此,我選擇了varchar(MAX)作爲數據類型。我創建了一個用於在表中輸入數據的存儲過程,併爲字段「ErrorDescription」創建了一個存儲過程,我使用了以下參數定義。SQL Server varchar(MAX)參數導致「參數對象定義不正確」

@ErrorDescription as varchar(MAX) 

問題是在調用存儲過程記錄錯誤的ADO過程(在Access 2003中)內。我將錯誤描述作爲字符串值並嘗試將其分配給參數...

cmd.Parameters("@ErrorDescription").Value = errorDescription 

但它失敗,並顯示以下錯誤。

「Parameter對象未正確定義」

如果我更改存儲過程定義...

@ErrorDescription as varchar(255) 

然後一切運作良好。我如何定義存儲過程參數來接受可能很長的字符串? varchar(MAX)是否使用錯誤的數據類型?謝謝。

編輯我應該提到我使用的SQL Server版本。我正在使用SQL Server 2008.

+3

什麼版本的sql server? – JNK 2010-10-18 16:47:16

+0

是否可以使用varchar(max)字段作爲參數?我不知道這個... – 2010-10-18 18:37:29

+0

@Phillipe - 它在2005+ – JNK 2010-10-18 18:43:53

回答

2

varchar(MAX)與SQL Server版本2005一起引入。我假定您使用的是2000版本。如果是這樣,那麼你可以枯萎使用varchar(8000)Text

+0

我結束了將存儲過程中的參數設置爲varchar(8000),並且都運行良好。 – webworm 2010-10-19 17:40:35

0

我會首先看看數據庫中列的定義來確認數據類型。

SQL_LONGVARCHAR是映射到Memo字段的服務器類型,我假定它是您希望用於此數據的Access數據類型。如果這種假設是正確的,看起來您需要將服務器數據類型更改爲SQL_LONGVARCHAR(例如,將該列創建爲類型'text'而不是'varchar(max)')。

2

我猜測Access 2003不知道MAX關鍵字代表什麼,因爲這是在SQL 2005中引入的。我不確定您是否可以通過使用TEXT數據類型來欺騙Access,並讓SQL正確映射此但是不管是否爲VARCHAR(MAX)列。

+0

訪問與它沒有任何關係。 VarChar()根本不是Access,除了傳遞查詢外,不能使用。如果這是上下文,那麼所有的工作都是可行的,因爲直通的一個重點是Access/Jet/ACE不會觸及它並直接發送到服務器進行處理。 – 2010-10-19 01:25:28