作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我们的应用程序通过 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);
关于sql-server - 对索引进行过滤的 SQL 输入参数默认为 nvarchar,导致全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64802734/
我是一名优秀的程序员,十分优秀!