小编use*_*221的帖子

为什么控制台应用程序受SSMS打开影响

我有一个控制台应用程序(c#),它打开与sql数据库的连接,执行存储过程,然后退出.存储过程自行计时(使用getdate和datediff)并将计时返回到控制台应用程序.存储过程始终报告执行大约100毫秒.

重复运行控制台应用程序会提供一致的一组计时(包括ExecuteReader命令的300毫秒)

然而,我偶然发现并可以可靠地重现的是以下效果:如果我打开SSMS并连接到数据库,然后运行控制台应用程序两次,控制台应用程序中的ExecuteReader第二次显着更快.

请注意,您不必在SSMS中运行甚至打开存储过程,只需连接到数据库即可

控制台应用程序的第二次运行受到显着影响,并且确实通过打开SSMS并连接到同一数据库来改进.例如

ExecuteReader when SSMS is not open 300 ms
ExecuteReader when SSMS is not open 300 ms
ExecuteReader when SSMS is not open 300 ms
Open SSMS and connect to database
First ExecuteReader when SSMS is open and connected to same database 300 ms
Second ExecuteReader with SSMS open and connected 10 ms !!!
Third ExecuteReader with SSMS open and connected 10 ms
Fourth ExecuteReader with SSMS open and connected 10 ms
Close SSMS
ExecuteReader back …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server

5
推荐指数
1
解决办法
106
查看次数

存储过程中接受永远不能工作的SQL Server查询

create procedure tempsproc
as 
    select t1.c1
    from #t 
    join t2 on #t.c2 = t3.c3
Run Code Online (Sandbox Code Playgroud)

select子句引用了from子句中未提及的表.我听说过延迟名称解析但我不知道无论运行时存在哪些表,上面的选择如何工作.

on子句还引用了from子句中未提及的表.

上面的SQL编译没有错误.

这个问题只在运行时出现 - 而不是你想要的

为了在编译时SQL Server拒绝上述过程,我需要做什么?

PS:这是在SQL Server 2008 R2 sp3系统上

sql t-sql sql-server sql-server-2008-r2

-1
推荐指数
1
解决办法
71
查看次数

标签 统计

sql-server ×2

.net ×1

c# ×1

sql ×1

sql-server-2008-r2 ×1

t-sql ×1