我在表中有一个字段,我想存储一个可能很长的错误字符串。为此,我选择了varchar(MAX)作为数据类型。我创建了一个存储过程,用于在表中输入该数据,对于字段“ErrorDescription”,我使用了以下参数定义。
@ErrorDescription as varchar(MAX)
问题出在ADO过程(在Access 2003中)内,该过程调用存储过程来记录错误。我将错误描述作为字符串值并尝试将其分配给参数...
cmd.Parameters("@ErrorDescription").Value = errorDescription
但它失败并出现以下错误。
“参数对象定义不正确”
如果我将存储过程定义更改为...
@ErrorDescription as varchar(255)
然后一切顺利。如何定义存储过程参数以接受可能非常长的字符串? varchar(MAX)
是否使用了错误的数据类型?谢谢。
编辑我应该提到我正在使用的SQL Server版本。我正在使用SQL Server 2008。
答案 0 :(得分:2)
varchar(MAX)
是在SQL Server 2005版本中引入的。我假设您使用的是2000版本。如果是这样,那么您可以使用varchar(8000)
或Text
答案 1 :(得分:2)
我猜想Access 2003不知道MAX
关键字代表什么,因为这是在SQL 2005中引入的。我不确定您是否可以使用TEXT
数据来欺骗Access但是,键入并让SQL正确地将其映射到VARCHAR(MAX)
列。
答案 2 :(得分:0)
我首先看一下数据库中列的定义以确认数据类型。
SQL_LONGVARCHAR是映射到“备注”字段的服务器类型,我假设它是此数据所需的Access数据类型。如果该假设是正确的,看起来您需要将服务器数据类型更改为SQL_LONGVARCHAR(例如,将列创建为类型'text'而不是'varchar(max)')。