小编Nic*_*mas的帖子

我可以在没有动态 sql 的情况下使用一个查询查询所有数据库中的存储过程吗

如果我想查询服务器上的所有数据库以查看是否存在存储过程,我可以组合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 和游标的情况下做同样的事情吗?

sql-server stored-procedures

6
推荐指数
2
解决办法
3918
查看次数

无论两个连接表中的列顺序如何,都执行 UNION ALL

SELECT * INTO TABLE1 
FROM Table2
UNION ALL 
SELECT * FROM Table3;
GO
Run Code Online (Sandbox Code Playgroud)

我正在使用此查询将两个表堆叠到一个表中。这些表的列顺序应该完全相同,这样查询才能成功执行。

我想知道是否有一个技巧我们可以做到,无论列顺序如何,它都可以工作。有没有办法指示 SQL Server 按名称自动排列两个表中的列并执行UNION

例如,在 SAS 中,诀窍是编写一个OUTER UNION CORR查询。

sql-server union

6
推荐指数
1
解决办法
9055
查看次数

使用没有聚集索引的哈希表是否有任何性能优势?

我有这张桌子:

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应始终是唯一的。

与将表保留为堆相比,创建这样的聚集索引是否更好?

index sql-server-2008 database-design sql-server heap

6
推荐指数
1
解决办法
1699
查看次数

恢复数据库不起作用

我有一个名为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

sql-server restore

6
推荐指数
2
解决办法
1万
查看次数

在不中断备份链的情况下将 SQL Server 2000 数据库复制到另一个盒子

我有一个很小但很重要的 MS SQL Server 2000 数据库,我想将它复制到开发盒中。我知道通常的方法是制作完整备份文件的副本,然后将该备份恢复到开发盒上。

这里的扭曲是我最近继承了这个数据库,它的备份由第三方工具 (Groundworks) 管理。据我所知,我无权访问备份文件本身,只能访问似乎没有公开它们的 Groundworks 界面。数据库具有完整、差异和事务日志备份,因此我不能仅从 Management Studio 自己进行备份,因为我知道在下一次完整计划备份之前我会使备份链无效。

如果这是 SQL Server 2005,我会使用仅复制备份来解决这个问题,但 SQL Server 2000 中似乎没有该功能。

有没有我缺少的方法?Groundworks 手册似乎没有涵盖这种情况,而且我在网上也没有运气,但我对 DBA 工作还很陌生,并且感觉我忽略了一些东西。

sql-server backup sql-server-2000

6
推荐指数
1
解决办法
950
查看次数

CTE 无限循环运行

我的 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)

sql-server cte

6
推荐指数
2
解决办法
8443
查看次数

是否有一种快速、直接的方法来测量 SQL Server 2000 上的每秒事务数?

sys.dm_os_performance_countersSQL Server 2005 中引入的DMV 使这项任务变得有些微不足道。但是,我的 Google-Fu 被阻止在 SQL Server 2000 中找到执行此操作的方法。

如何测量 SQL Server 2000 中的每秒事务数?

performance monitoring sql-server sql-server-2000

6
推荐指数
1
解决办法
516
查看次数

这种“受限一对多”关系有名字吗?它可以在数据库中强制执行吗?

在我正在处理的应用程序中,我们有一种“受限制的一对多”关系。我想知道这是否有名称,以及是否可以在数据库级别强制执行。

标准的一对多可能是peopleto pets。一个人可以养多只宠物,每只宠物都属于指定的物种。你可以有 0 只宠物,或者 2 只狗和一只猫,或者只有一只长尾小鹦鹉等等。

在我们的例子中,我们想说“一个人可以有很多宠物,但每种宠物不能超过一只”。你可以拥有 0 只宠物,或者只有一只猫,或者一只狗和一只长尾小鹦鹉,但你永远不能拥有 2 个任何物种。

我只能看到两种方法来做到这一点:

  • people为每个可能的宠物的外键(acat_id和 adog_id等)设置一列。不过,这意味着NULL桌子上会有很多s。
  • 建立标准的一对多,其中的每一行pets都有一个指向 的外键people,并使用数据库外部的代码按物种强制执行唯一性。

任何替代想法?

database-design constraint

6
推荐指数
2
解决办法
254
查看次数

关于 SSAS Cube 的几个问题

我是 SSAS 2012 的新手,以下是我的问题:

  • 我们可以有复杂类型(表)的度量吗?
  • 是否可以按特定度量或属性对结果进行排序?
  • 我的立方体可以建模为一维层次结构,这通常好吗?
  • 我可以在一系列成员上使用远程分区对多维数据集进行分片吗?
  • 我们有 SQL Server 2012 数据库的远程表分区吗?

谢谢!

sql-server ssas sql-server-2012

6
推荐指数
1
解决办法
405
查看次数

优化在 5000 万行上运行的 mysql 查询

是否有任何技术/建议可以优化以下查询的性能?

根据我的需要,我的平均数据库大小约为 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)

任何帮助,将不胜感激。

mysql innodb optimization

6
推荐指数
1
解决办法
2万
查看次数