我正在编写一个小型数据库测试套件,它使用查询和预期结果读取配置文件,例如:
query = "SELECT * from cities WHERE name='Unknown';"
count = 0
level = 1
name = "Check for cities whose name should be null"
suggested_fix = "UPDATE cities SET name=NULL WHERE name='Unknown';"
Run Code Online (Sandbox Code Playgroud)
这很好用; 我使用Python划分每一行string.partition('=').
我的问题是SQL查询很长.目前,我只是将这些查询粘贴为单行,这是丑陋且无法维护的.
我希望找到一种优雅的Pythonic方式来阅读表达的权利,即使跨越多行.
笔记:
="右手边强迫s 的想法,因为有许多没有它的现有文件.编辑:
ConfigParser很棒,但它强制我在多行条目的每一行的开头添加一个空格或制表符.这可能是一个巨大的痛苦.
提前致谢,
亚当
考虑下面我的SQL查询; 它为同一个参数调用两次.这是重复服务器完成的工作.有一个更好的方法吗?
SELECT Status_Detail_Code, count(*) as
[Number of times assigned], round(sum(Duration)/60,2) as [total duration Hr]
FROM dbo.V_TIMELINE
WHERE (CADATE > N'20080101')
group by Status_Detail_Code order by sum(Duration) desc
Run Code Online (Sandbox Code Playgroud) 我在SQL Server 2k8中有一个带有XML列的表.以下SQL检索一些XML:
SELECT TOP 1 my_xml_column FROM my_table
Run Code Online (Sandbox Code Playgroud)
让我们说它返回以下XML
<a>
<b />
<c>
<d />
<d />
<d />
</c>
</a>
Run Code Online (Sandbox Code Playgroud)
我想得到的是
/a
/a/b
/a/c
/a/c/d
/a/e
Run Code Online (Sandbox Code Playgroud)
换句话说,我怎样才能让SQL Server告诉我XML的结构?
我可以执行以下操作来获取各个元素的所有名称:
SELECT C1.query('fn:local-name(.)')
FROM my_table
CROSS APPLY my_xml_column.nodes('//*') AS T ( C1 )
Run Code Online (Sandbox Code Playgroud)
也许如果有一个等效的"local-name()"返回了元素的整个路径就可以了?
我有两个linq(到EF4)查询,返回不同的结果.第一个查询包含正确的结果,但未正确格式化/投影.
第二个查询是我想要的,但它缺少一些数据.
alt text http://img220.imageshack.us/img220/9678/schema.png
var xxxx = (from cp in _connectedClientRepository
.GetConnectedClients(new[] { "LogEntry", "LogEntry.GameFile" })
.AsExpandable()
.Where(predicate)
select cp)
.ToList();
Run Code Online (Sandbox Code Playgroud)
alt text http://img231.imageshack.us/img231/6541/image2ys.png
注意该财产GameFile.它不是空的.这很棒:)请注意linq查询?我渴望加载一个LogEntry然后急切加载GameFile(对于每个渴望加载的LogEntry).
这就是我所追求的 - >对于每一个LogEntry渴望加载的人,请急切加载GameFile.但这个预测结果是错误的......
好的......接下来......
var yyy = (from cp in _connectedClientRepository
.GetConnectedClients(new[] { "LogEntry", "LogEntry.GameFile" })
.AsExpandable()
.Where(predicate)
select cp.LogEntry)
.ToList();
Run Code Online (Sandbox Code Playgroud)
alt text http://img24.imageshack.us/img24/4417/image1tu.png
注意:上面的图片中有一个拼写错误...请注意包含关联类型代码是正确的(即.LogEntry.GameFile),而图像上的拼写错误.
现在正确投影 - >所有LogEntries结果.但请注意该GameFile属性现在如何为空?我不确定为什么:(我以为我正确地渴望加载正确的链.所以这是正确的投影,但结果不正确. …
我有一个应用程序执行SQL数据库的备份和恢复,这在本地计算机上工作正常,但是如果我对另一台机器上托管的SQL服务器运行此操作,我会收到以下错误
Microsoft.SqlServer.Management.Smo.FailedOperationException:服务器'25 .98.30.79'的备份失败.---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常.---> System.Data.SqlClient.SqlException:无法打开备份设备'C:\ Program Files\State Manager\Archive\Capture\20100217152147*product*\databases*database**database*.bak'.操作系统错误3(系统找不到指定的路径.).
这似乎是由SQL服务器尝试将此文件写入其本地驱动器引起的.由于安全限制,我无法设置可以放置备份的共享区域.
有谁知道如何将这些数据移回到调用代码的机器上?
我的代码如下.
private string Name;
private string Server;
private string dbName;
private string user;
private string password;
public Boolean performCapture(String archiveDir)
{
String destination = archiveDir + "\\" + Name;
if (!System.IO.Directory.Exists(destination))
{
System.IO.Directory.CreateDirectory(destination);
}
Server sqlServer = connect();
if (sqlServer != null)
{
DatabaseCollection dbc = sqlServer.Databases;
if (dbc.Contains(dbName))
{
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = dbName;
BackupDeviceItem bkpDevice = new BackupDeviceItem(destination + "\\" + dbName …Run Code Online (Sandbox Code Playgroud) 好的,所以我试图查询我的数据库并选择具有特定值的所有行.之后我将查询转换为带有mysql_fetch_array()的数组,然后我尝试使用for循环遍历获取的数组中的行.
<?php
$query = mysql_query("SELECT * FROM users WHERE pointsAvailable > 0 ORDER BY pointsAvailable Desc");
$queryResultArray = mysql_fetch_array($query);
foreach($queryResultArray as $row)
{
echo $row['pointsAvailable'];
}
?>
Run Code Online (Sandbox Code Playgroud)
虽然当我为pointsAvailable列之外的任何列执行此操作时,如果列出名为"name"的text类型,它只返回一个字母.
如何逐行遍历返回的查询,并允许从当前行获取特定的数据列?
我有一个包含用户项目的表.每个用户可以具有多种类型的项目,并且可以使每个项目不止一次.我想看看每个用户拥有的每种类型的项目数量.所以我使用以下查询:
select user_name, count(item_name) as "count_item", item_name
from my_table
group by user_name, item_name
order by user_name, count_item desc;
Run Code Online (Sandbox Code Playgroud)
所以我得到这样的东西:
user_name | count_item | item_name
----------+-------------+-----------
User 1 | 10 | item X
User 1 | 8 | item Y
User 2 | 15 | item A
User 2 | 13 | item B
User 2 | 7 | item C
User 2 | 2 | item X
Run Code Online (Sandbox Code Playgroud)
等等
现在,我想只看到每个用户的前3项.在上面的示例中,对于用户1,我想要查看项目X和Y,对于用户2,我想要查看项目A,B和C.
我怎么能这样呢?
谢谢!
我有一个SQL语句,我希望ep_codes通过使用IN子句获得1200 的数据.当我ep_codes在IN子句中包含超过1000个内容时,Oracle说我不允许这样做.为了解决这个问题,我尝试更改SQL代码,如下所示:
SELECT period, ...
FROM my_view
WHERE period = '200912'
...
AND ep_codes IN (...1000 ep_codes...)
OR ep_codes IN (...200 ep_codes...)
Run Code Online (Sandbox Code Playgroud)
代码已成功执行,但结果很奇怪(计算结果是针对所有期间提取的,而不仅仅是针对200912,这不是我想要的).是否适合使用ORbetween IN子句执行此操作,还是应该执行两个单独的代码,一个代码为1000,另一个代码代表200个ep_codes?
Pascal Martin的解决方案非常完美.感谢所有提出宝贵建议的人.
我为sql server 2008下载并安装了AdventureWorks数据库.你知道是否有任何练习或教程吗?我想练习我的SQL select语句
我想实现这样的目标:
SELECT
(CASE WHEN ...) AS FieldA,
FieldA + 20 AS FieldB
FROM Tbl
Run Code Online (Sandbox Code Playgroud)
假设通过"..."我已经替换了一个冗长而复杂的CASE语句,我不想在选择FieldB和使用别名时重复它FieldA.
注意,这将返回多行,因此在我的情况下,语句之外的DECLARE/ 不好.SETSELECT