如果我想查询服务器上的所有数据库以查看是否存在存储过程,我可以组合sp_executesql并在类似于以下的查询上运行游标:
SELECT
'select ' + '''' + name + '''' + ', name from [' + name
+ '].sys.procedures WHERE name = ''usp_MyProc'' COLLATE SQL_Latin1_General_CP1_CI_AI '
FROM sys.databases
-- I get a collation error from the following
WHERE name NOT IN ('ReportServer', 'ReportServerTempDb');
Run Code Online (Sandbox Code Playgroud)
我可以在没有动态 sql 和游标的情况下做同样的事情吗?
SELECT * INTO TABLE1
FROM Table2
UNION ALL
SELECT * FROM Table3;
GO
Run Code Online (Sandbox Code Playgroud)
我正在使用此查询将两个表堆叠到一个表中。这些表的列顺序应该完全相同,这样查询才能成功执行。
我想知道是否有一个技巧我们可以做到,无论列顺序如何,它都可以工作。有没有办法指示 SQL Server 按名称自动排列两个表中的列并执行UNION?
例如,在 SAS 中,诀窍是编写一个OUTER UNION CORR查询。
我有这张桌子:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
它存储哈希匹配。将其作为堆有什么好处吗?它有大约 700 万行,并且值在任一列中都不是唯一的。我知道堆通常对任何大表都不好。此表当前没有索引。
我正在考虑将表格更改为:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL,
CONSTRAINT [pk_relatea] PRIMARY KEY CLUSTERED (
[mid] ASC,
[sid] ASC
)
)
Run Code Online (Sandbox Code Playgroud)
表的查询一般但不总是在sid和组合mid,并sid应始终是唯一的。
与将表保留为堆相比,创建这样的聚集索引是否更好?
我有一个名为FDB. 我使用SQL Server Express Edition在我的 PC 上创建了这个数据库并添加了一个表。我备份了这个数据库。服务器上的 SQL Server 版本是2005。
我将此备份复制到服务器并尝试恢复它,但我收到此消息:
设备 C:\Program File\Microsoft SQL Server\MSSQL.1\MSSQL\Bacup\FDB.bak 上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。RESTORE Headeronly 异常终止。Microsoft SQL Server 错误 3241
我有一个很小但很重要的 MS SQL Server 2000 数据库,我想将它复制到开发盒中。我知道通常的方法是制作完整备份文件的副本,然后将该备份恢复到开发盒上。
这里的扭曲是我最近继承了这个数据库,它的备份由第三方工具 (Groundworks) 管理。据我所知,我无权访问备份文件本身,只能访问似乎没有公开它们的 Groundworks 界面。数据库具有完整、差异和事务日志备份,因此我不能仅从 Management Studio 自己进行备份,因为我知道在下一次完整计划备份之前我会使备份链无效。
如果这是 SQL Server 2005,我会使用仅复制备份来解决这个问题,但 SQL Server 2000 中似乎没有该功能。
有没有我缺少的方法?Groundworks 手册似乎没有涵盖这种情况,而且我在网上也没有运气,但我对 DBA 工作还很陌生,并且感觉我忽略了一些东西。
我的 CTE 为特定客户无限循环运行,我无法找出原因。
这是查询:
;WITH ClassTree
AS (SELECT ID, NAME, Parent_ID
FROM TableName
WHERE ID = 1
UNION ALL
SELECT T.ID, T.NAME, T.Parent_ID
FROM TableName T WITH (NOLOCK)
JOIN ClassTree
ON Parent_ID = ClassTree.ID
)
SELECT * FROM ClassTree
Run Code Online (Sandbox Code Playgroud) sys.dm_os_performance_countersSQL Server 2005 中引入的DMV 使这项任务变得有些微不足道。但是,我的 Google-Fu 被阻止在 SQL Server 2000 中找到执行此操作的方法。
如何测量 SQL Server 2000 中的每秒事务数?
在我正在处理的应用程序中,我们有一种“受限制的一对多”关系。我想知道这是否有名称,以及是否可以在数据库级别强制执行。
标准的一对多可能是peopleto pets。一个人可以养多只宠物,每只宠物都属于指定的物种。你可以有 0 只宠物,或者 2 只狗和一只猫,或者只有一只长尾小鹦鹉等等。
在我们的例子中,我们想说“一个人可以有很多宠物,但每种宠物不能超过一只”。你可以拥有 0 只宠物,或者只有一只猫,或者一只狗和一只长尾小鹦鹉,但你永远不能拥有 2 个任何物种。
我只能看到两种方法来做到这一点:
people为每个可能的宠物的外键(acat_id和 adog_id等)设置一列。不过,这意味着NULL桌子上会有很多s。pets都有一个指向 的外键people,并使用数据库外部的代码按物种强制执行唯一性。任何替代想法?
我是 SSAS 2012 的新手,以下是我的问题:
谢谢!
是否有任何技术/建议可以优化以下查询的性能?
根据我的需要,我的平均数据库大小约为 30mill。每天行,所以每一秒减少,都会产生巨大的差异。
我的数据库引擎是 innoDB,我使用 1 核 CPU,2GB RAM。
执行时间:7.5 秒(550 万行)
SELECT vpn_group, username, from_interface_addr_ip
FROM SystemEventsR
WHERE (timestamp > ( NOW( ) - INTERVAL 10 MINUTE ) AND
SysLogTagflag=1 AND
username !='')
GROUP BY username
Run Code Online (Sandbox Code Playgroud)
执行时间:88.4 秒(570 万行)
SELECT syslogtagid, DeviceReportedTime, class, definition, SystemEventsR.SysLogTag,
COUNT(id) AS Records,
explanation, action
FROM SystemEventsR,oa_syslogtags
WHERE (SystemEventsR.SysLogTag = oa_syslogtags.syslogtag AND
flagid = 1 AND DATE(timestamp) = DATE(NOW()))
GROUP BY SystemEventsR.SysLogTag
ORDER BY Records DESC
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
sql-server ×8
backup ×1
constraint ×1
cte ×1
heap ×1
index ×1
innodb ×1
monitoring ×1
mysql ×1
optimization ×1
performance ×1
restore ×1
ssas ×1
union ×1