这是我到目前为止所拥有的。我知道这有效,但我需要获得 和 的平均值,pulse而depressionlevel不是为每一行返回实际值:
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) 注意:我使用 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 R2,其数据库实例在端口 1433 上运行。1433 对 TCP 开放,1434 对 UDP 开放。
当通过 Microsoft SQL Management Studio 连接时,我们的防火墙会检测端口 50235 上的TCP 流量。为什么?据我所知,SQL Server 没有提到这个端口。
请参阅下面的第一个查询。
不能将表提示索引和 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 超时问题之后,我们添加了一些索引,然后使查询运行得非常快,并摆脱了我们遇到的任何超时问题。奇怪的是,使用大约一个月后,查询再次开始超时。如果我们删除相同的索引集并重新创建它们,查询将再次开始快速运行。
指数没什么特别的:
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。
我有一个 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 服务器上设置了 SSAS 数据库。我为一组用户设置了一个角色,我希望能够访问该数据库中的多维数据集。无论它说什么,我都设置了“读取定义”和“读取访问”,但这似乎不起作用。
用户可以打开我之前设置的数据透视表,但不会显示任何时间,但维度数据会显示得很好(用户、部门等)。
然后我设置了一个个人用户并给了他们完全控制权(管理员),效果很好。我缺少什么可以让他们正确访问多维数据集?进程数据库?还有什么?
问完这个我还有一个问题。
公司需要存储敏感数据。请我们现在不要谈论证书。
一个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)
一切都很好。
问题 :
当程序员打开对称密钥时,他必须知道密码。我不认为程序员应该知道密码。如何解决?
如果一个 GOD 黑客得到了整个.BAK文件并将备份恢复到他自己的机器上 - 他可以查看其中一个程序员编写的存储过程源,并查看密码。然后黑客可以做:
开放对称密钥 SecureSymmetricKey1 密码解密 = N'blabla'
我错过了什么?
谢谢你的帮助。
我正在阅读 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%。
我的问题是
在惰性编写器开始将页面逐出内存之前,数据库页面缓存占用的最大内存是否有限制?它是如何控制的?通过查看缓冲区中的空闲页数……** …
我有一个表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 ×10
sql-server ×3
query ×2
security ×2
hints ×1
index ×1
join ×1
pivot ×1
ssas ×1