gpt4 book ai didi

可以在 sql profiler 中读取的 SQL 'comment'

转载 作者:行者123 更新时间:2023-12-01 11:29:34 26 4
gpt4 key购买 nike

我尝试了几种方法,例如使用双连字符,即 --THIS IS A COMMENT 但是当在分析器中读取执行的 sql 时,注释被删除,只留下正在执行的原始 SQL。

我想这样做是为了在查看每分钟超过 8000 个条目的 SQL Profilers 输出时快速识别查询及其来源,
所以像

--Method signature and an application name

例如
--MyMethod(string username) in MyFunkyAppName.

我正在使用 EntityFramework 4.3,它使 linq to entity 和少量 linq to sql 的问题进一步复杂化。

编辑 :我知道添加狡猾的 where 子句或使用匿名属性来识别诸如 Clever tricks to find specific LINQ queries in SQL Profiler 之类的内容的解决方案。但我希望有一种不那么老套的方法,或者可能是一种通用的方法。

最佳答案

这是可用于标记 Entity Framework 查询的扩展方法。它使用 WHERE 子句,但不应损害性能。

public static class ExtensionMethods
{
public static IQueryable<T> SetQueryName<T>(this IQueryable<T> source,
[CallerMemberName] String name = null,
[CallerFilePath] String sourceFilePath = "",
[CallerLineNumber] Int32 sourceLineNumber = 0)
{
var expr = Expression.NotEqual(Expression.Constant("Query name: " + name), Expression.Constant(null));
var param = Expression.Parameter(typeof(T), "param");
var criteria1 = Expression.Lambda<Func<T, Boolean>>(expr, param);

expr = Expression.NotEqual(Expression.Constant($"Source: {sourceFilePath} ({sourceLineNumber})"), Expression.Constant(null));
var criteria2 = Expression.Lambda<Func<T, Boolean>>(expr, param);

return source.Where(criteria1).Where(criteria2);
}
}

以下是如何使用它:
context.Table1.SetQueryName().Where(x => x.C1 > 4)

它将使用调用方法名称作为查询名称。

您可以指定另一个名称,如下所示:
context.Table1.SetQueryName("Search for numbers > 4").Where(x => x.Number > 4)

下面是 SQL 的样子:
SELECT 
[Extent1].[Number] AS [Number]
FROM (SELECT
[Table1].[Number] AS [Number]
FROM [dbo].[Table1] AS [Table1]) AS [Extent1]
WHERE
(N'Query name: Search for numbers > 4' IS NOT NULL)
AND
(N'Source: C:\Code\Projects\MyApp\Program.cs (49)' IS NOT NULL)
AND ([Extent1].[Number] > 4)

关于可以在 sql profiler 中读取的 SQL 'comment',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898930/

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