Sta*_*ser 7 performance sql-server stored-procedures execution-plan sql-server-2008-r2 query-performance
我有一个这样的程序(简化):
CREATE PROCEDURE test @userName VARCHAR(64)
SELECT *
FROM member M
INNER JOIN order O
ON M.MemberId=O.MemberId
WHERE M.Username = @userName
Run Code Online (Sandbox Code Playgroud)
Member 表的 Username 列上有一个非聚集索引。
计划缓存显示隐式转换如下:
查找键[1]:前缀:[MyDatabase].[dbo].[Member].Username = Scalar Operator(CONVERT_IMPLICIT(varchar(64),[@Username],0))
我只是想知道是什么导致了这种隐式转换,因为参数和字段数据类型“UserName”都是 varchar(64)?
像这样从框架调用 SP:
EXEC test @Username=N'webSite.com'
Run Code Online (Sandbox Code Playgroud)
谢谢你。
发生 CONVERT_IMPLICIT 是因为列上的排序规则与参数的排序规则不匹配。所以参数被转换为列的排序规则。
进一步解释 - 有触发此转换的排序规则强制规则。因此,如果您对该列有一个隐式排序规则,并且该参数有一个 coercible-default,则该参数将转换为该列的排序规则。如果两者都有明确但不同的排序规则,则会导致排序规则冲突错误。
归档时间: |
|
查看次数: |
477 次 |
最近记录: |