我正在查看 SQL Server Mgmt Studio 中的查询计划,我看到如下内容:
(@P0 nvarchar(4000), @P1 nvarchar(4000)) Update...
参数旁边的类型是什么意思?对于此示例,我们假设这些参数的列实际上是varchar(64)
. 这是在运行时绑定参数的方式吗?
编辑
这是一个使用 JDBC 3.0 或 4.0 提供程序的 Java EE 应用程序。基本上,我们有一个充满 SQL 语句的属性文件,如下所示:
mySqlStatementFoo = UPDATE Schema.Table.Column set column = 1 WHERE objectID = ?
过去,如果存在绑定不匹配,我们会像这样转换参数:
Where objectID = CAST(? AS VARCHAR(36))
我想他们选择这样做是因为我们支持多个数据库。IE DB2 和 Oracle。我还没有看到实际的 Java,但我怀疑他们只是从文件中选择语句并将其发送到网络中。我正在做负载测试,看到我们正在做表扫描,并怀疑优化器没有使用正确的索引,因为参数绑定不正确。