gpt4 book ai didi

sql - NHibernate show-sql - 为什么显示的 SQL 无效?

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

我喜欢 NHibernate 中显示生成的 SQL 的功能。但是当我将它粘贴到 SQL Server Management Studio 中时,我意识到它实际上无效!

这是一个例子:

SELECT person0_.PersonId as PersonId1_0_, person0_.Title as Title1_0_, person0_.FirstName as FirstName1_0_, person0_.MiddleNames as MiddleNa4_1_0_, person0_.LastName as LastName1_0_ FROM Kctc.People person0_ WHERE person0_.PersonId=@p0;@p0 = 1

由于指定参数 p0 的方式,这是无效的。它需要:

DECLARE @p0 int
SET @p0 = 1

在 SELECT 命令之前。

我想我的问题是:为什么 NHibernate 不显示它发送到数据库的实际 SQL?为什么它显示这个呢?

有什么我想念的吗?

谢谢

大卫

最佳答案

发送到 SQL Server 的命令是发送给 sp_executesql 的字符串参数系统存储过程。参数列表作为参数、值对参数列表发送。使用 SQL Profiler 可以很容易地看到这一点。 NHibernate Profiler将查询重新格式化为可以剪切并粘贴到 SSMS 中的查询。

这是发送到 SQL Server 的实际 NHibernate 对象加载示例:

exec sp_executesql N'SELECT track0_.TrackId as TrackId84_0_, track0_.CreatedBy as CreatedBy84_0_, track0_.CreatedDt as CreatedDt84_0_, track0_.RevisedBy as RevisedBy84_0_, track0_.RevisedDt as RevisedDt84_0_, track0_.Name as Name84_0_, track0_.Description as Descript7_84_0_ FROM Nucleus.Track track0_ WHERE track0_.Name=@p0',N'@p0 nvarchar(8)',@p0=N'6036HPGP'

由于查询是作为字符串发送到 sp_executesql 的,您可能会得到一个与直接执行查询生成的执行计划不同的执行计划。在某些情况下,这可能会对性能造成巨大影响。

关于sql - NHibernate show-sql - 为什么显示的 SQL 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3264049/

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