我使用sql server并拥有一个巨大的数据库,在多个文件组中按日期分区.数据库文件组是PRIMARY, FG2010, FG2011, FG2012, FG2013, and FG2014,FG2010,FG2011,FG2012和FG2013是只读的.
现在,备份方案是:
每个星期五凌晨2点获得完整备份
除周五外的每周一天在凌晨2:00获得差异备份
我想将此方案更改为:
获得数据库的完整备份(一次)
每周五凌晨2:00获得PRIMARY和FG2014的完整备份
除星期五凌晨2点外,每天都会获得PRIMARY和FG2014的差异备份
问题1:我可以有这种情况吗?
我也有恢复计划.每天我通过作业自动将备份文件复制到另一台服务器然后恢复它,以便有恢复测试计划,并使用恢复的数据库给开发人员和测试人员用户.
我希望有以下恢复计划方案:
恢复数据库的完整备份.
恢复PRIMARY和FG2014的上次完整备份.
恢复PRIMARY和FG2014的上次差异备份.
问题2:我可以将此方案用于恢复计划吗?
问题3:我可以有更好的备份和恢复方案吗?
请用TSQL查询回答我的问题.
sql-server backup restore sql-server-2008-r2 sql-server-2012
我们的团队最近将我们的数据库从SQL Server 2008升级到SQL Server 2012.我们注意到的一个重大变化是SELECT语句返回的行的默认顺序,即未指定显式ORDER BY子句时.
根据MSDN,除非指定了ORDER BY子句,否则SQL Server 2012不会保证返回的行的顺序.
我们在5个数据库中有2500多个存储过程,这些数据库具有没有ORDER BY子句的SELECT语句,并且手动添加ORDER BY子句以匹配SQL Server 2008中的行为将是一项相当大的工作.是否有设置或更快的方法这个?
另一个尚未探索的选项是降级到SQL Server 2008.这有多难?
sql sql-server database-migration sql-server-2008 sql-server-2012
这个文件工作正常(UTF-8):
$ cat ok.txt
291054 ?aw? Rif?
Run Code Online (Sandbox Code Playgroud)
此文件导致错误(UTF-8):
$ cat bad.txt
291054 ?aw? Rif?‘
Run Code Online (Sandbox Code Playgroud)
这是消息:
$ freebcp 'DB.dbo.table' in bad.txt ... -c
Starting copy...
Msg 20050, Level 4
Attempt to convert data stopped by syntax error in source field
Msg 4895, Level 16, State 2
Server '...', Line 1
Unicode data is odd byte size for column 2. Should be even byte size.
Msg 20018, Level 16
General SQL Server error: Check messages from the SQL Server
Run Code Online (Sandbox Code Playgroud)
唯一的区别是最后一个字符,即unicode 2018(左单引号)
知道是什么导致了这个错误吗? …
sql-server unicode character-encoding freetds sql-server-2012
我在SQL Server 2012中遇到了经典的参数嗅探问题.基于一些研究,我发现了围绕这个问题的多种选择.我需要了解的区别这两个选项是OPTION(OPTIMIZE FOR UNKNOWN)VS OPTION(RECOMPILE).
我犹豫是否OPTION(RECOMPILE)在我的查询结束时使用这个问题,因为它会强制服务器每次都生成一个新的执行计划.如果我经常调用此查询,这将会占用该计算机的CPU.
因此,我使用他最好的解决方案,这两个选项之间的真正区别是什么?
是否会OPTION(OPTIMIZE FOR UNKNOWN)重复使用缓存而不是每次重新编译?
我在SQL Server 2012中有一个表,如快照所示:

然后我使用Last_Value()和First Value来获取不同YearMonth的每个EmpID的AverageAmount.脚本如下:
SELECT A.EmpID,
First_Value(A.AverageAmount) OVER (PARTITION BY A.EmpID Order by A.DimYearMonthKey asc) AS '200901AvgAmount',
Last_Value(A.AverageAmount) OVER (PARTITION BY A.EmpID Order by A.DimYearMonthKey asc) AS '201112AvgAmount'
FROM Emp_Amt AS A
Run Code Online (Sandbox Code Playgroud)
但是,此查询的结果是:

在"201112AvgAmount"列中,它显示每个EmpID的不同值,而"200901AvgAmount"具有正确的值.
我的SQL脚本有什么问题吗?我在网上做了很多研究,但仍然找不到答案....
我正在使用northwind数据库通过创建一些或多或少复杂的查询来刷新我的SQL技能.不幸的是,我无法找到我最后一个用例的解决方案:"获取1997年每个类别的五个最大订单的总和."
涉及的表格是:
Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询
SELECT c.CategoryName, SUM(
(SELECT TOP 5 od2.UnitPrice*od2.Quantity
FROM [Order Details] od2, Products p2
WHERE od2.ProductID = p2.ProductID
AND c.CategoryID = p2.CategoryID
ORDER BY 1 DESC))
FROM [Order Details] od, Products p, Categories c, Orders o
WHERE od.ProductID = p. ProductID
AND p.CategoryID = c.CategoryID
AND od.OrderID = o.OrderID
AND YEAR(o.OrderDate) = 1997
GROUP BY c.CategoryName
Run Code Online (Sandbox Code Playgroud)
嗯......事实证明,在聚合函数中不允许使用子查询.我已经阅读了有关此问题的其他帖子,但无法找到针对我的具体用例的解决方案.希望你能帮帮我...
免责声明:在SO上有一个类似的问题似乎是指旧版本的SSDT.所选答案引用了不在我的项目中的设置文件.我相信我在正确设置的新项目格式中有相同的设置.
我是SSDT的新手,我不相信它不会以非预期的方式改变我的数据库.按照我想要的方式获取设置后,我尝试了一个发布,看看它会尝试对我的数据库做什么.我将这些语句添加到发布脚本中:
ALTER DATABASE [$(DatabaseName)]
SET ANSI_NULLS ON,
ANSI_PADDING ON,
ANSI_WARNINGS ON,
ARITHABORT ON,
CONCAT_NULL_YIELDS_NULL ON,
CURSOR_DEFAULT LOCAL,
RECOVERY FULL,
AUTO_UPDATE_STATISTICS ON
WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [$(DatabaseName)]
SET PAGE_VERIFY NONE
WITH ROLLBACK IMMEDIATE;
EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
SET TRUSTWORTHY OFF
WITH ROLLBACK IMMEDIATE';
Run Code Online (Sandbox Code Playgroud)
我不希望数据库项目永远修改我的数据库设置,所以我在调试设置下取消选中此项:

此外,在高级发布设置下:

在项目设置下| 数据库设置我使一切都与我的数据库匹配

我怎么能阻止这个?
sql-server publish database-project sql-server-2012 sql-server-data-tools
服务器:SQL Server 2012; SP1; 开发人员版
码:
declare @datetime datetime = '1900-01-01 00:00:00.000'
declare @time time = '11:11:11'
select @datetime + @time
Run Code Online (Sandbox Code Playgroud)
当我在MASTER数据库中运行上面的代码时,我收到错误:
消息402,级别16,状态1,行3数据类型日期时间和时间在添加运算符中不兼容.
但是当它是任何其他数据库时,它的工作原理!知道为什么会这样吗?
PS - 在企业版中,无论数据库上下文如何,都会引发错误.
我有一个几何尺寸很小的立方体.目前整个过程需要2个小时.我现在已经对多维数据集进行了分区并遵循以下策略:
因为我在某些方面几乎没有刚性关系,所以我无法进行流程更新.我现在所有这些都变得灵活.但在那之后我的立方体的处理时间增加到2小时40分钟.
现在,我的问题是为什么过程更新需要这么长时间?以及如何让它加工更快?我只是一次处理2个分区.这是故障:
我正在通过W3School学习SQL的基础知识,在理解通配符的基础知识时,我经历了以下查询:
--Finds any values that start with "a" and are at least 3 characters in length
WHERE CustomerName LIKE 'a_%_%'
Run Code Online (Sandbox Code Playgroud)
根据以下示例,查询将搜索CustomerName列以"a"开头并且长度至少为3个字符的表.
但是,我也尝试以下查询:
WHERE CustomerName LIKE 'a__%'
Run Code Online (Sandbox Code Playgroud)
上面的查询也给了我完全相同的结果.我想知道这两个查询是否有任何区别?在某些特定情况下,第二个查询是否会产生不同的输出?如果是,那将是什么情景?