据我所知,资源数据库包含有关其服务器实例中所有对象的信息,因此我认为当您从备份文件恢复数据库时,该过程的一部分是在服务器资源中注册其对象是很自然的数据库,但我找不到有关该主题的任何具体信息,也无法在本地对其进行测试。
我正在研究两台不同机器上的 SQL Server 表的分区。一台机器运行Microsoft SQL Server (RTM) 2016 Developer Edition,另一台机器运行Microsoft SQL Server 2016 (SP1) Standard Edition。
从这个条目中我可以看到,SQL Server 2016 (SP1) Standard Edition 应该支持分区。
但是,从 Developer Edition 上的 SSMS 中,我可以使用内置向导通过选择表上的“存储”选项来对表进行分区,但是标准版计算机上的 SSMS 中缺少此选项。这可能是什么原因?SSMS 是否会根据其运行的 SQL Server 版本改变外观?
这是开发人员版 SSMS 中的菜单:
这是标准版 SSMS 中的菜单:
我有一个存储过程,用于将 csv 文件加载到 SQL Server。这将最初将文件批量插入到全局临时表中,然后在最后执行:
select cast(column1 as int) [column1], column2, column3... into table from ##temptable
Run Code Online (Sandbox Code Playgroud)
然后继续删除 ##temptable
在查询之前,select into table from ##temptable我select对临时表运行了一系列查询以确定列应该是什么类型(我相信这可以正常工作)。
请注意,在创建最终输出表之前拥有一个表(正常的或临时的)对于存储过程至关重要。
我想知道的是,我是否最好使用全局临时表,或者我应该使用普通表还是没有区别?
我看过几篇关于临时表和表变量之间差异的文章,但是在将全局临时表与普通表进行比较时我什么也没看到,而且我很难在我的环境中正确地测试它。
我们如何根据年龄删除所有数据库。
如果我使用今天的日期并保留 2 个月,则列表将带有以下查询,现在我想删除所有带有查询输出的数据库。
SELECT name as [database] , database_id, create_date
FROM sys.databases where create_date <= '20190726' AND name NOT IN ('Master','Model','MSDB','tempdb')
Run Code Online (Sandbox Code Playgroud)
以下脚本无法处理错误:
DROP DATABASE VM_P
消息 2812,级别 16,状态 62,第 15 行
找不到存储过程“DROP DATABASE VM_P。
DECLARE @DBName VARCHAR (64)
DECLARE @SQL VARCHAR (255)
DECLARE DROPDB CURSOR FOR
SELECT name FROM sys.databases
WHERE create_date <= '20190726'
AND name NOT IN ('master','model','msdb','tempdb','distribution','ReportServer','ReportServerTempDB')
OPEN DROPDB
FETCH next FROM DROPDB INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'DROP DATABASE …Run Code Online (Sandbox Code Playgroud) 我工作的公司允许他们的客户拥有多个帐户。帐户也可能是负数。因此,他们的客户余额表如下所示:
????????????????????????????????????
? Customer No. ? Account ? Balance ?
????????????????????????????????????
? 1 ? A ? 1.00 ?
????????????????????????????????????
? 1 ? B ? -2.00 ?
????????????????????????????????????
? 1 ? C ? 3.00 ?
????????????????????????????????????
? 2 ? A ? 4.00 ?
????????????????????????????????????
? 2 ? B ? -5.00 ?
????????????????????????????????????
? 2 ? C ? -6.00 ?
????????????????????????????????????
? 3 ? A ? 7.00 ?
????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取余额列的总和,不包括总余额为负的任何客户。因此,上表的结果应为 9.00 -- 客户 1 和 3 的总余额为正,因此包括所有帐户,但客户 2 的总余额为负,因此不包括任何帐户。
(注意:这是一年一次的查询,因此性能不是真正的问题。)
我有一个来自 SQL 2016 服务器的备份文件,我需要确定该文件是在哪个 SQL 服务器上创建的。有没有办法识别文件起源的原始 SQL 服务器?谢谢你。
我正在对我们的开发数据库进行干净的备份,以便轻松地重新启动数据库。该数据库有大约 200 个测试用户,应该将其删除以使其真正干净,但问题是我无法删除其中任何一个。
当我运行如下命令时:
DROP USER [MyGarbageUser]
Run Code Online (Sandbox Code Playgroud)
它提示我以下错误:
消息 15284,级别 16,状态 1,第 5 行 数据库主体已授予或拒绝对数据库中的对象的权限,无法删除。
这些用户既不拥有该数据库中的任何对象(据我所知),也不应该拥有。在网上搜索了一大堆后,我仍然无法找到解决方案。
如何强制从该数据库中删除 MyGarbageUser?
我在一个人表中有行。每个都可以通过链接表链接到事物表中的多行。每个事物都有一个 objectType。我想获取 person 表中仅链接到三个特定 objectType 的所有行,并且每个人只需要一行。我是 SQL 新手,不知道从哪里开始。我已经设置了一个示例:
http://sqlfiddle.com/#!18/56bd69/2
仅使用 INNER JOINS 和 WHERE 不起作用,因为它返回所有人员行。
我想将 'IS NULL' 设置为变量并在 WHERE 子句中使用它。我会将许多带有相同 WHERE 子句的表合并在一起,并希望灵活地为我的yearCompleted列使用一个变量- 请参见下面的示例 -
DECLARE @YEARCOMPLETED
SET @YEARCOMPLETED = NULL
SELECT * FROM TABLE1
WHERE yearCompleted = @YEARCOMPLETED
UNION ALL
SELECT * FROM TABLE2
WHERE yearCompleted = @YEARCOMPLETED
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否可以使用变量找到 yearCompleted 为 NULL 的行?
sql-server ×10
restore ×2
backup ×1
delete ×1
metadata ×1
null ×1
partitioning ×1
performance ×1
ssms ×1
sys ×1
users ×1