您在参数声明中为 varchar(MAX) 使用啥大小?
Posted
技术标签:
【中文标题】您在参数声明中为 varchar(MAX) 使用啥大小?【英文标题】:What size do you use for varchar(MAX) in your parameter declaration?您在参数声明中为 varchar(MAX) 使用什么大小? 【发布时间】:2010-11-01 16:13:54 【问题描述】:我通常在 ADO.NET 中创建参数时设置列大小。
但是如果列的类型是VARCHAR(MAX)
,我应该使用什么大小?
cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;
【问题讨论】:
【参考方案1】:在这种情况下,您使用 -1。
【讨论】:
将所有参数长度设置为 -1 是否有任何性能缺陷,因此我不必维护 db 匹配列表? 对于小于 8000 字节的值,Varchar(max) 的处理方式与 varchar(8000) 相同。对于较大的值,该字段被视为“文本”字段(又名“CLOB”)。这可能会影响查询计划优化和检索此列中具有较大值的行的效率,因为数据是“行外”存储的,需要额外的查找。 在sql中使用nvarchar(max),在c#中用SqlDbType.NVarchar定义长度-1 如果不是下面 Sam Meshesha 的回答 - 我会错过你的回答。如果您将示例代码行格式化为代码,您的答案可能会获得更多选票。【参考方案2】:对于我们这些没有看到 Michal Chaniewski 的 -1 的人来说,完整的代码行:
cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";
【讨论】:
【参考方案3】:最大 SqlDbType.VarChar 大小为 2147483647。
如果您使用通用 oledb 连接 而不是 sql,我发现 here 还有一个 LongVarChar 数据类型。它的最大尺寸是 2147483647。
cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";
【讨论】:
【参考方案4】:如果你这样做:
cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
大小将取自“一些大文本”。长度
当它是一个输出参数时,这可能会出现问题,当您输入输入时,您将无法返回更多字符。
【讨论】:
我似乎对我未设置其大小的SqlParameter
感到异常,即使我确实分配了一个值 - 但是,我没有使用 Add
的重载,而是创建SqlParameter
实例本人。您正在使用的Add
的重载是否已经将Size
初始化为可能的东西?【参考方案5】:
不需要传递size参数,只要声明Varchar
已经明白是MAX就好了:
cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
【讨论】:
由于执行计划的计算方式,这可能会对您的 SQL 服务器产生负面影响。 我发现在使用输出参数时情况并非如此。它会导致以下错误 `Exception:String[2]: the Size property has an invalid size of 0.` 要解决此问题,请使用 Size = -1 请参阅***.com/questions/21087950/… 我今天发现这实际上很糟糕,因为 SQL 服务器每次都必须重新编译计划。在我们的例子中,它为一个简单的 INSERT 缓存了 60,000 个计划,因为我们不知道这一点。以上是关于您在参数声明中为 varchar(MAX) 使用啥大小?的主要内容,如果未能解决你的问题,请参考以下文章
从文本转移到 varchar(MAX):MS Access 有啥问题吗?