如果你有一个带Sqlaccess的C#函数,是否必须关闭所有对象/句柄,或者在退出函数后自动清理所有内容
例如:
void DoSqlStuff()
{
SqlConnection sqlConn = new SqlConnection(...);
SqlCommand cmd = new SqlCommand(...);
SqlDataReader sqlData= null;
sqlConn,Open();
sqlData = cmd.ExecutReader();
while(sqlData.Read())
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
关闭SqlConn和SqlData是可选的,推荐的还是必需的?
谢谢.
我们有一个每晚运行的存储过程,反过来启动了许多其他程序.其中一些程序在逻辑上可以与其他一些程序并行运行.
WAITFOR DELAY?目前我们还在使用SQL Server 2000.
作为旁注,这很重要,因为主程序是响应从大型机系统完成从服务器到服务器的数据而启动的.大型机转储每晚大约需要2个小时,我们无法控制它.因此,我们一直在努力寻找缩短处理时间的方法.
我有四个包含完全相同列的表,并且想要创建所有四个视图,以便我可以一起查询它们.
这可能吗?
(由于繁琐的原因,我不能/不允许将它们组合起来,这会使这无关紧要!)
我在LAMP设置上有共享主机.显然,每页对Db的调用越少越好.但是有多少太多了?二?十?一百?好奇人们的想法.
虽然这个问题看起来很简单,但它有点棘手.
我有一个包含以下列的表:
table A:
int ID
float value
datetime date
varchar(50) group
Run Code Online (Sandbox Code Playgroud)
我想获取包含按"group"列分组的最大"date"的记录的"ID"和"value".像"每个群体的最新价值是什么?"
我可以得到每个组及其最大日期:
SELECT group, MAX(date) FROM A GROUP BY group; -- I also need the "ID" and "value"
但我想拥有最高日期的记录的"ID"和值.
在A和结果之间建立联接可能是答案,但是无法知道MAX(日期)引用哪条记录(如果"日期"重复).
有人可以帮忙吗?
简单地说,我有一个表,其中包括一个时间戳列.我想获得具有最新(即最大值)时间戳的行.目前我这样做:
SELECT * FROM table ORDER BY timestamp DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但我宁愿做这样的事情:
SELECT * FROM table WHERE timestamp=max(timestamp)
Run Code Online (Sandbox Code Playgroud)
但是,SQLite拒绝此查询:
SQL error: misuse of aggregate function max()
Run Code Online (Sandbox Code Playgroud)
该文件证实了这一行为(页面底部):
聚合函数只能在SELECT语句中使用.
我的问题是:是否有可能编写一个查询来获取具有最大时间戳的行而不排序选择并将返回的行数限制为1?这似乎应该是可能的,但我想我的SQL-fu不适合鼻烟.
来自Joel Spolsky 关于漏洞抽象的 文章:
[C]某些SQL查询比其他逻辑上等效的查询慢几千倍.一个着名的例子是,如果你指定"a = b和b = c和a = c",那么某些SQL服务器要比你只指定"where a = b和b = c"那样快得多,即使结果集也是如此是一样的.
有谁知道这个细节?
如何在SQL中将其转换为小数?下面是等式,我得到答案为78(整数),但真正的答案是78.6(带小数)所以我需要显示这个,否则报告将不会达到100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Run Code Online (Sandbox Code Playgroud) 我有一个同事正在寻找这个,我不记得曾经遇到过这样的事情.
是否有合理的技术可以让你模拟它?
SELECT PRODUCT(X)
FROM
(
SELECT 3 X FROM DUAL
UNION ALL
SELECT 5 X FROM DUAL
UNION ALL
SELECT 2 X FROM DUAL
)
Run Code Online (Sandbox Code Playgroud)
会产生30
我正在使用类似于以下形式的SQL查询:
SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
AND table1.period = table2.period
Run Code Online (Sandbox Code Playgroud)
而且它要么太慢,要么死机,因为它至少需要4分钟才能返回.如果我要将其更改为:
SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
WHERE table1.period = table2.period
Run Code Online (Sandbox Code Playgroud)
然后它工作正常(尽管没有返回正确数量的列).有什么方法可以加快速度吗?
更新:如果我切换后一个查询的最后两行,它会做同样的事情:
SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.period = table2.period
WHERE table1.person_uid = table2.person_uid
Run Code Online (Sandbox Code Playgroud)
更新2: 这些实际上是我加入的观点.不幸的是,它们位于我无法控制的数据库上,因此我无法(轻松)对索引进行任何更改.我倾向于同意这是一个索引问题.我会等一会儿才接受答案,以防有一些神奇的方法来调整我不知道的查询.否则,我会接受当前的答案之一,并尝试找出另一种方法来做我想做的事情.感谢大家的帮助到目前为止.