gpt4 book ai didi

sql-server - 对索引进行过滤的 SQL 输入参数默认为 nvarchar,导致全表扫描

转载 作者:行者123 更新时间:2023-12-02 19:07:38 25 4
gpt4 key购买 nike

当我们的应用程序通过 ADO.Net 提交带有输入参数的 SQL 时,参数定义默认为 nvarchar。如果该字段在数据库表上定义为 varchar 和索引,则不会使用索引,从而导致扫描而不是查找。我们正在从 Teradata 转换到 SQL Server,因此这是转换过程中的一个系统性问题。申请团队向我提交了这个:

When we define anything as a String in Code, the ADO.Net provider automatically assumes that is aNVarchar in SQLServer.

他们的解决方案之一是仅针对超过 1,000 行的表修复此问题。我认为这在很多层面上都是错误的,但我正在寻找一些额外的输入。

我是一名 Teradata DBA,正在转型为 MSSQL DBA。

我假设 ADO.Net 中的此设置是可配置的。对我来说,显然输入参数定义需要与表中的字段定义匹配,特别是如果它是导致全表扫描的索引的一部分。

任何人都可以帮助我(1)如何设置输入参数定义以匹配表定义?(2)如果这是系统性的,为什么只修复这些参数和查询是一个坏主意,如果表的大小超过 1,000 条记录?

最佳答案

正如您在下面的代码中看到的,您可以在该表单中指定参数的数据类型

    connection.Open();
SqlCommand command = new SqlCommand(null, connection);

// Create and prepare an SQL statement.
command.CommandText =
"INSERT INTO Region (RegionID, RegionDescription) " +
"VALUES (@id, @desc)";
SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int, 0);
SqlParameter descParam =
new SqlParameter("@desc", SqlDbType.Text, 100);
idParam.Value = 20;
descParam.Value = "First Region";
command.Parameters.Add(idParam);
command.Parameters.Add(descParam);

参见Microsoft descriction of prepared statements

关于sql-server - 对索引进行过滤的 SQL 输入参数默认为 nvarchar,导致全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64802734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com