【问题标题】:What Size Value Should Be Used When Adding a Parameter of SqlDbType.Text?添加SqlDbType.Text的参数时应该使用什么大小值?
【发布时间】:2018-10-10 21:15:41
【问题描述】:

我正在更新项目代码,以便在从我们的 C# 应用程序查询数据库时最大限度地重复使用 SQL Server 查询计划。

我们使用 ADO.NET,并且我们正在将所有查询转换为使用 SqlParameters。

当添加一个参数,其值将被设置到 TEXT 类型的表列中,我们正在使用:

[...]

command.Parameters.Add("@MyParamName", SqlDBType.Text, someSize).Value = paramValue;

[...]

如果我们的目标是让这种语句重用查询计划,我应该使用什么大小来代替上面的“someSize”?

是否有一个特殊值可以提供成功让 SQL Server 在每次调用此代码时重新使用查询计划的最佳机会?


更新

根据@Sean-Lange 的评论,Microsoft 正在弃用 NTEXT、TEXT 和 IMAGE……摘自the link 他在下面的 cmets 中提供的内容:

重要! ntext、text 和 image 数据类型将在 SQL Server 的未来版本。避免在 new 中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

【问题讨论】:

  • 你一开始就不应该使用那种类型。 text 数据类型已经被弃用了近 15 年,现在有利于 varchar(max)。 docs.microsoft.com/en-us/sql/t-sql/data-types/…
  • @SeanLange,想把它作为答案,我会接受 - 我的技术负责人刚刚说他通常会在看到任何 Text 列时将它们更改为 varchar(max)。
  • 我还建议尽可能指定varchar(8000)(甚至更低的值)而不是varchar(max)varchar(max) 很多时候都带有性能价格。
  • @ZoharPeled - 这个观点对我来说似乎很奇怪。显然,有时可能会有一些协商的余地和空间,但通常如果我们首先选择varchar(max),那是因为存在一些操作限制,排除了下限。 (暂时忽略数据“建模者”,他们总是使用最大的可用数据类型来“面向未来”他们的设计)
  • @Damien_The_Unbeliever 您忽略的数据“建模者”是我首先发布我之前评论的确切原因:-)。当然,如果您可能需要超过 8000 个字符或 4000 个 Unicode 字符,则必须使用 max。这就是我写“只要有可能”的原因。

标签: c# sql-server ado.net sql-server-2017


【解决方案1】:

文本数据类型在 sql server 2005 中被弃用,取而代之的是 varchar(max)。您可以在此处阅读有关该数据类型的更多信息。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-2017

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 2010-11-13
    • 2021-05-26
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多