标签: sql-server-2008

SQL Server 2008:使用 AVG() 和内部联接

这是我到目前为止所拥有的。我知道这有效,但我需要获得 和 的平均值,pulsedepressionlevel不是为每一行返回实际值:

SELECT
  Patients.LastName
  , PatientVisit.Pulse AS [avg Pulse]
  , PatientVisit.DepressionLevel AS [avg Deplevel]
FROM Patients
    INNER JOIN PatientVisit on Patients.PatientKey = PatientVisit.PatientKey
ORDER BY
  Patients.LastName
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 query

4
推荐指数
1
解决办法
1884
查看次数

对此的替代查询(避免 DISTINCT)

注意:我使用 MSSQL 2008,但我想它对许多其他数据库引擎有效 我有这个表“用户”:

用户 ID 用户国家 ID
1 用户 1 1
2 用户 2 2
3 用户 3 3
4 用户 4 4
5 用户 5 4
6 用户 6 3

而这张表“国家”

CountryID 国家
1 MX
2 美国
3 CAN
4 英格兰

如您所见,每个用户都属于一个国家。

如果我想知道,我在用户表上至少拥有一个用户的所有不同国家/地区,现在我执行以下查询:

select distinct country 
from Users inner join
countries on users.CountryID=countries.CountryID
Run Code Online (Sandbox Code Playgroud)

并实现下一个结果集:

能够
英国
MX
美国 

这确实是所有不同的国家,其中我在 muy 表 Users 上至少有一个用户。

我的疑问是,是否可以在不使用“DISTINCT”的情况下实现上述结果集,我的意思是只使用 JOINS 和条件?

这是 de DDL 脚本:

使用 [测试]
走
/****** 对象:表 [dbo].[用户] 脚本日期:09/21/2012 16:21:14 …

sql-server-2008 join query query-refactor

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

连接到 SQL Server 需要端口 50235 上的 TCP 通信?

我们有一个 SQL Server 2008 R2,其数据库实例在端口 1433 上运行。1433 对 TCP 开放,1434 对 UDP 开放。

当通过 Microsoft SQL Management Studio 连接时,我们的防火墙会检测端口 50235 上的TCP 流量。为什么?据我所知,SQL Server 没有提到这个端口。

sql-server-2008 sql-server

4
推荐指数
1
解决办法
9250
查看次数

将表提示 INDEX 和 FORCESEEK 与两个不在 PK 上的连接相结合

请参阅下面的第一个查询。
不能将表提示索引和 forceseek 与两个连接组合在一起,并且连接不在 PK 上。
如何使第一个查询编译?

有趣
- 如果只有一个连接或另一个可以组合索引和 forceseek 提示
- 如果索引是 PK 那么可以组合 2 个连接并有两个提示

-- compiler fails 
-- Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN.  
Select Count(Distinct([docSVsys].[sID])) 
From [docSVsys] with (nolock) 
Left Join [docSVtext] with (nolock, Index(IX_docSVtext_value_sID), forceseek ) 
       On [docSVtext].[sID] = [docSVsys].[sID]
Left Join [docMVtext] with (nolock, Index(ix_docMVtext_value_sID), forceseek) 
       On [docMVtext].[sID] = [docSVsys].[sID]
where …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server hints

4
推荐指数
3
解决办法
1万
查看次数

SQL Server 超时:删除并重新创建索引解决了问题

在我们的一个查询出现 sql 超时问题之后,我们添加了一些索引,然后使查询运行得非常快,并摆脱了我们遇到的任何超时问题。奇怪的是,使用大约一个月后,查询再次开始超时。如果我们删除相同的索引集并重新创建它们,查询将再次开始快速运行。

指数没什么特别的:

CREATE NONCLUSTERED INDEX [IX_Transaction_BillingAccountId] ON [dbo].[Transaction] 
(
     [BillingAccountId] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法?我们使用的是 SQL Server 2008 Express。

index sql-server-2008

4
推荐指数
1
解决办法
7561
查看次数

SQL Server 数据库有非常小的备份

我有一个 216 GB 的数据库。75% 被数据使用,剩下的被索引和日志使用。当我检查数据库文件中的可用空间时,我得到大约 300 MB 的值。数据库分为 3 个数据文件。当我在没有压缩的情况下进行完整备份时,我得到了 38 GB 的备份。

谁能解释一下?我可以从数据库中恢复任何磁盘空间吗?

更新:如果我尝试恢复备份,它需要超过 200 GB 的磁盘空间。

Update2:我通过运行获得了这些值:

select Name,
(convert(float,size)) * (8192.0/1048576) File_Size,
(convert(float,fileproperty(name,'SpaceUsed'))) * (8192.0/1048576) MB_Used,
((convert(float,size)) * (8192.0/1048576) - (convert(float,fileproperty(name,'SpaceUsed'))) * (8192.0/1048576)) MB_Free
from sysfiles
order by fileproperty(name,'IsLogFile')
Run Code Online (Sandbox Code Playgroud)

结果是:

QASDATA1    74124   73383,75    740,25
QASDATA2    69548   69114   434
QASDATA3    72288   71972,6875  315,3125
QASLOG1 374,8203125 112,1015625 262,71875
Run Code Online (Sandbox Code Playgroud)

更新 3:以下是有关备份本身的更多信息,查询如下:

QAS x:\sql\SQL42\QAS\QAS_log_20121030.BAK   51 MB   160 MB  7 Seconds   2012-10-30 01:00:00.000 16269000022730200001    16271000002874600001    Transaction Log SQL42   FULL
QAS x:\sql\SQL42\QAS\QAS_data_20121025.BAK  38820 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

4
推荐指数
1
解决办法
2443
查看次数

仅使用 Excel 读取 SSAS Cube 的安全权限

我在 SQL Server 2008 服务器上设置了 SSAS 数据库。我为一组用户设置了一个角色,我希望能够访问该数据库中的多维数据集。无论它说什么,我都设置了“读取定义”和“读取访问”,但这似乎不起作用。

用户可以打开我之前设置的数据透视表,但不会显示任何时间,但维度数据会显示得很好(用户、部门等)。

然后我设置了一个个人用户并给了他们完全控制权(管理员),效果很好。我缺少什么可以让他们正确访问多维数据集?进程数据库?还有什么?

sql-server-2008 security ssas pivot

4
推荐指数
1
解决办法
7335
查看次数

了解 SQL Server 加密(通过密码)?

问完这个我还有一个问题。

公司需要存储敏感数据。请我们现在不要谈论证书。

一个DBA执行以下操作:

  CREATE SYMMETRIC KEY SecureSymmetricKey1 
  WITH ALGORITHM = DESX
  ENCRYPTION BY PASSWORD = N'blabla';
Run Code Online (Sandbox Code Playgroud)

一个程序员想要加密数据并执行以下操作:

  -- open key
  OPEN SYMMETRIC KEY SecureSymmetricKey1
  DECRYPTION BY PASSWORD = N'blabla'

  -- actual encrpyt
  DECLARE @encrypted_str VARBINARY(MAX)
  SET @encrypted_str =  EncryptByKey(Key_GUID('SecureSymmetricKey1'),'my data');
Run Code Online (Sandbox Code Playgroud)

另一个程序员想要读取数据,所以他这样做:

  DECLARE @decrypted_str VARBINARY(MAX)
  SET @decrypted_str = DecryptByKey(...encrypted_str...) 
Run Code Online (Sandbox Code Playgroud)

一切都很好。

问题 :

  1. 当程序员打开对称密钥时,他必须知道密码。我不认为程序员应该知道密码。如何解决?

  2. 如果一个 GOD 黑客得到了整个.BAK文件并将备份恢复到他自己的机器上 - 他可以查看其中一个程序员编写的存储过程源,并查看密码。然后黑客可以做:

    开放对称密钥 SecureSymmetricKey1 密码解密 = N'blabla'

我错过了什么?

谢谢你的帮助。

sql-server-2008 security sql-server

4
推荐指数
1
解决办法
1650
查看次数

SQL Server 动态内存管理

我正在阅读 Christian Bolton、Brent Ozar 的一本关于 SQL 2008 内部结构和故障排除的书,以及已故 Ken Henderson 写的一本旧书,我对 SQL 服务器的动态内存管理器感到困惑和好奇。

有人可以确认我对 SQL Server 动态内存管理的理解是正确的吗?

在 SQL Server 2005/2008/2008R2 x64 中

a) 锁占用的最大内存量限制为缓冲池内存(最大服务器内存)的 60%。通过禁用锁升级并进行大量插入,我可以看到 SQL Server 在抛出错误号 1204(锁内存不足)之前可以占用多达 60% 的缓冲池内存

b) 计划缓存大小限制为

 a) Number of plans in cache -- 160K 

 b) Plan Cache upper limit: 75% of server memory from 0-4GB + 10% of server memory from 4Gb-64GB + 5% of server memory > 64GB.  
Run Code Online (Sandbox Code Playgroud)

一旦达到此阈值,SQL Server 将开始从缓存中驱逐执行计划,直到 SQL Server 不再看到内部计划缓存压力

c) 工作区内存限制为最大服务器内存的 75%,除非被资源调控器覆盖,否则单个查询不能超过(可用的最大工作区内存 75%)的 25%。

我的问题是

在惰性编写器开始将页面逐出内存之前,数据库页面缓存占用的最大内存是否有限制?它是如何控制的?通过查看缓冲区中的空闲页数……** …

sql-server-2008 sql-server-2008-r2 sql-server-2012

4
推荐指数
1
解决办法
1544
查看次数

合并和格式化两个表中的数据

我有一个表Slot,默认数据如下:

第一桌

================================
|  Day  | Time  | Venue | Free |
================================
|   1   | 0830  | RM 1  |  10  |
|   1   | 0830  | RM 2  |  10  |
|   1   | 1030  | RM 1  |  20  |
|   1   | 1030  | RM 2  |  20  |
|   2   | 0830  | RM 1  |  10  |
|   2   | 0830  | RM 2  |  10  |
|   2   | 1030  | …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

4
推荐指数
1
解决办法
121
查看次数