好的,我有一个旧的批处理文件,它完全符合我的需要.但是,如果没有新的管理,我们就不能再运行批处理文件了,所以我需要启动C#.
我正在使用Visual Studio C#,并且已经为我需要构建的应用程序设置了表单.(我正在学习)
这是我需要在C#中完成的(这是批量内容)
sqlcmd.exe -S .\PDATA_SQLEXPRESS -U sa -P 2BeChanged! -d PDATA_SQLEXPRESS -s ; -W -w 100 -Q "SELECT tPatCulIntPatIDPk, tPatSFirstname, tPatSName, tPatDBirthday FROM [dbo].[TPatientRaw] WHERE tPatSName = '%name%' "
Run Code Online (Sandbox Code Playgroud)
基本上它使用SQLCMD.exe已经存在的数据源调用PDATA_SQLExpress.
我已经搜索过并且已经接近但我仍然不知道从哪里开始.
我有一个动态查询,太大了,无法放在这里.可以肯定地说,在它的当前形式中,它利用CLR过程根据传递的搜索参数的数量动态地构建连接,然后获取该结果并将其连接到更详细的表以带回对最终用户重要的属性.我已经将整个查询转换为LINQ to Entities,我发现它生成的SQL足以完成这项工作,无论是通过EF 6运行,查询超时.获取生成的SQL并在SSMS中运行它将在3秒或更短的时间内运行.我只能想象我的问题是参数嗅探.我已经尝试更新数据库中每个表的统计信息,但这还没有解决问题.
我的问题是:
我可以通过EF以某种方式嵌入像"OPTION RECOMPILE"这样的选项吗?
我正在执行以下LINQ to Entities查询但它被卡住并且在超时之前不会返回响应.我在SQL Server上执行了相同的查询,并在3秒内返回92000.
var query = (from r in WinCtx.PartsRoutings
join s in WinCtx.Tab_Processes on r.ProcessName equals s.ProcessName
join p in WinCtx.Tab_Parts on r.CustPartNum equals p.CustPartNum
select new { r}).ToList();
Run Code Online (Sandbox Code Playgroud)
SQL生成:
SELECT [ I omitted columns]
FROM [dbo].[PartsRouting] AS [Extent1]
INNER JOIN [dbo].[Tab_Processes] AS [Extent2] ON ([Extent1].[ProcessName] = [Extent2].[ProcessName]) OR (([Extent1].[ProcessName] IS NULL) AND ([Extent2].[ProcessName] IS NULL))
INNER JOIN [dbo].[Tab_Parts] AS [Extent3] ON ([Extent1].[CustPartNum] = [Extent3].[CustPartNum]) OR (([Extent1].[CustPartNum] IS NULL) AND ([Extent3].[CustPartNum] IS NULL))
Run Code Online (Sandbox Code Playgroud)
PartsRouting Table有100,000多条记录,Parts = 15000+,Processes = …