有没有办法将 SQL Server 2012 数据库备份还原到 SQL Server 2008?
我试图附加文件,它不起作用。
根据这个微软文档:
http://msdn.microsoft.com/en-us/library/ms174205.aspx
我应该能够使用 ctrl+K 然后 ctrl+D 在 SQL Server Management Studio 2012 中格式化我的 SQL 文档,但是当我使用该组合时,出现错误:
组合键(Ctrl+K、Ctrl+D)绑定到当前不可用的命令(格式化文档)。
我正在尝试对现有的 SQL 文档进行修改,该文档根本没有格式化,这使得阅读非常困难。有谁知道如何使格式化文档命令可用,以便我可以使用 SQL 为我格式化此代码?
从技术上讲,NULL = NULL 是 False,根据该逻辑,没有 NULL 等于任何 NULL,并且所有 NULL 都是不同的。这不应该意味着所有 NULL 都是唯一的并且唯一索引应该允许任意数量的 NULL 吗?
null database-design sql-server constraint unique-constraint
使用某些方法,当您创建表的副本时,您会丢失索引、PK、FK 等。例如在 SQL Server 中,我可以说:
select * into dbo.table2 from dbo.table1;
Run Code Online (Sandbox Code Playgroud)
这只是表格的简单副本;缺少所有索引/约束。如何复制表结构(不使用备份)?
我主要希望手动执行此操作,但如果不可能,我将接受任何解决方案。
正如标题所暗示的,我需要一些帮助来获得 T-SQL 的运行总数。问题是我需要做的总和是计数的总和:
sum(count (distinct (customers)))
Run Code Online (Sandbox Code Playgroud)
假设我单独进行计数,结果将是:
Day | CountCustomers
----------------------
5/1 | 1
5/2 | 0
5/3 | 5
Run Code Online (Sandbox Code Playgroud)
我需要输出总和为:
Day | RunningTotalCustomers
----------------------
5/1 | 1
5/2 | 1
5/3 | 6
Run Code Online (Sandbox Code Playgroud)
在使用该coalesce方法之前,我已经完成了运行总计,但从未进行过计数。我现在不知道该怎么做。
我想从 SQL Server 数据库中的所有表中删除所有默认约束、检查约束、唯一约束、主键和外键。我知道如何从 中获取所有约束名称sys.objects,但是如何填充ALTER TABLE部件?
我试图决定数据库设计,在这个阶段尽可能少的假设(关于 web 应用程序的实际发展)。
作为第一步,了解 JOINS 是昂贵的,我正在考虑少量的整体表,而不是大量的规范化较小的表。第二点,我在使用 hstore 与常规表与 JSONB(使用 GiST 索引)之间感到困惑。
AFAIK(请随时纠正):
通常,在 Postgres 中,已知 hstore 的性能优于其他数据类型。来自 FOSDEM PGDAY 的这个演讲有一些有趣的统计数据(在幻灯片的后半部分)。 https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
hstore 的一个优势是快速索引(GiN 或 GiST)。但是,使用 JSONB,GiN 和 GiST 索引也可以应用于 JSON 数据。
来自第二象限的专业人士的这篇博客说“此时可能值得在所有新应用程序中用 jsonb 替换 hstore 使用”(滚动到最后):http ://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary -jsonhstore-dynamic-columns/
所以我想决定以下几点:
刚刚遇到一个奇怪的问题,根据我创建索引的方式,需要一个索引名称。
http://dev.mysql.com/doc/refman/5.5/en/create-index.html
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html
CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name
ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name
Run Code Online (Sandbox Code Playgroud)
在我看来, CREATE INDEX 调用不应该要求索引名称。我想知道这是 MySQL 主义还是 SQL 标准?
在立即标记为重复之前,我已阅读 Mike Walsh 的《为什么事务日志不断增长或空间不足?,但我认为它没有回答我的情况。我浏览了十几个类似的问题,但相关的问题大多只是说“重复”并指向迈克的问题。
详细信息:我在 SQL Server 2008 R2 上有一堆约 500MB 的数据库,都处于简单恢复模式(不是我的选择),每晚完整备份,包含约 200MB 的数据文件和约 300MB 的日志文件。日志不会立即增长到 300MB,而是在几个月的过程中缓慢增长。至少根据 sp_who2 和活动监视器,它们中的任何一个都没有打开的事务。如果我右键单击数据库并选择属性,它会告诉我有大约 50MB 可用空间。特别是在备份之后,整个日志不应该是免费的吗?在 SIMPLE 模式下,只要没有打开的事务,日志就不应该是免费的吗?
log_reuse_wait_descfromsys.databases说“NOTHING”,根据上面引用的问题和答案说它不应该等待任何东西来重用空间。
如果我做'DBCC SHRINKFILE',日志文件缩小到1MB,所以它愿意回收空间。我可以设置一些每周缩小日志并防止事情失控的东西,但我很困惑为什么 SQL Server 会让我这样做。
我可以理解是否有一些疯狂的事务需要 300MB 来记录它,但我们没有做任何极端的事情,只是基本的 OLTP。来自迈克的问题/答案:
简单恢复模型 - 有了上面的介绍,最容易先讨论简单恢复模型。在此模型中,您是在告诉 SQL Server - 我对您使用您的事务日志文件进行崩溃和重新启动恢复感到满意(您在那里确实别无选择。查找 ACID 属性,这应该很快就有意义),但是一旦您没有不再需要它用于崩溃/重启恢复目的,继续并重用日志文件。
SQL Server 在 Simple Recovery 中侦听此请求,并且仅保留执行崩溃/重新启动恢复所需的信息。一旦 SQL Server 确定它可以恢复,因为数据已加固到数据文件(或多或少),已加固的数据在日志中不再需要并被标记为截断 - 这意味着它会被重新使用。
它一直说日志空间应该被重用,但是随着几个月的缓慢增长,它似乎不是。
我错过了什么?是否有什么原因使 SQL Server 无法将数据识别为“硬化”并释放日志?
(编辑) 行动后报告 - AKA 一点点知识是危险的
在发现这是一个“热门问题”后,我觉得我欠了一个解释 7 个月前发生的事情以及我学到的东西,希望能挽救一些其他人的悲伤。
首先,当您查看数据库的属性时,您在 SSMS 中看到的可用空间是数据文件中的可用空间。您可以通过在数据库上运行以下命令来查看这一点,您会发现 SSMS 报告的可用空间是 FileSizeMB 和 UsedSpaceMB …
查询优化器使用的统计信息物理存储在 SQL Server 数据库文件和缓冲池中的什么位置?
更具体地说,有没有办法使用 DMV 和/或 DBCC 找出统计数据使用的页面?
我拥有 SQL Server 2008 Internals 和 SQL Server Internals and Troubleshooting 书籍,但没有一本涉及统计的物理结构;如果他们这样做,我将无法找到此信息。
sql-server ×8
constraint ×3
index ×2
ddl ×1
metadata ×1
mysql ×1
null ×1
postgresql ×1
schema ×1
sql-standard ×1
ssms ×1
statistics ×1
t-sql ×1