标签: sql-server

SQL Server 2012 与 2008 备份的向后兼容性

我有许多使用 SQL Server 2008 的客户端,这也是我服务器上的客户端。我使用备份文件在客户和我的办公室之间来回发送数据库。

我读到当您从 SQL Server 2012 创建备份时,无法将其还原到 2008 实例。我认为兼容性级别会解决这个问题,但事实并非如此。因此,我不知道如何升级。除了一次升级所有客户端(这是不可能的)之外,我想不出干净的方法来做到这一点。

我需要将数据库发送到客户端以及从客户端接收数据库。这是我在 SQL Server 上的第一次版本升级,所以我是这个问题的新手。关于如何进行的任何想法?

sql-server

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

为范围内的每个日期返回一列

假设我有表 A:BookingsPerPerson

Person_Id    ArrivalDate    DepartureDate
123456       2012-01-01     2012-01-04
213415       2012-01-02     2012-01-07
Run Code Online (Sandbox Code Playgroud)

我需要通过视图实现以下目标:

Person_Id    ArrivalDate    DepartureDate    Jan-01    Jan-02    Jan-03    Jan-04    Jan-05    Jan-06    Jan-07
123456       2012-01-01     2012-01-04       1         1         1         1
213415       2012-01-02     2012-01-07                 1         1         1         1         1         1
Run Code Online (Sandbox Code Playgroud)

该系统用于活动,因此每次酒店预订可能需要 1 到 15 天的时间,但不会超过此时间。任何想法将不胜感激。

sql-server-2008 sql-server pivot

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

SQL Server 在相等比较中自动修剪 varchar 值但不喜欢比较

我今天在 SQL Server 上遇到了一些有趣的行为(在 2005 年和 2012 年观察到),我希望有人能解释一下。

使用=NVARCHAR 字段进行比较的查询会忽略字符串中的尾随空格(或在比较之前自动修剪值),但使用like运算符的同一查询不会忽略该空格。2012 年使用的排序规则是 Latin1_General_CI_AS。

考虑这个 SQL 小提琴:http ://sqlfiddle.com/#! 6/72262/4

请注意,like运算符不会返回尾随空格字符串的结果,但=运算符会返回。为什么是这样?

加分项:我无法在 VARCHAR 字段上复制它,我原以为在两种数据类型中都会以相同的方式处理空间 - 这是真的吗?

sql-server sql-server-2012

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

如何通过数据库获取特定实例的 CPU 使用率?

我发现以下查询可以按数据库检测 CPU 使用率,但它们显示不同的结果:

WITH DB_CPU_Stats
AS
(
    SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], 
      SUM(total_worker_time) AS [CPU_Time_Ms]
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY (
                    SELECT CONVERT(int, value) AS [DatabaseID] 
                  FROM sys.dm_exec_plan_attributes(qs.plan_handle)
                  WHERE attribute = N'dbid') AS F_DB
    GROUP BY DatabaseID
)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
       DatabaseName,
        [CPU_Time_Ms], 
       CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
--WHERE DatabaseID > 4 -- system databases
--AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012

15
推荐指数
1
解决办法
7万
查看次数

资源池“内部”中的系统内存不足,无法运行此查询

我们的一台生产服务器在日志中报告错误

错误:701,严重性:17,状态:123
。资源池“内部”中的系统内存不足,无法运行此查询。

我搜索了这个错误,发现它是一个错误,并且有一个带有 service pack 2 的热修复。这些是服务器的详细信息:

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 标准版(64 位)
处理器数量:24(有 2 个 NUMA 节点,每个有 12 个内核)
内存:为 SQL Server 分配 24GB RAM。
查询批量/分钟:5000+

我的问题是

  • 为什么我们会收到此错误?
  • 这是一个严重的问题吗?
  • 我们如何解决?

编辑内存状态:

MEMORYBROKER_FOR_RESERVE (internal) Pages ---------------------------------------- ---------- Allocations 200362 Rate 4510 Target Allocations 200362 Future Allocations 588626 Overall 2521497 Last Notification 0
MEMORYBROKER_FOR_STEAL (internal) Pages ---------------------------------------- ---------- Allocations 431548 Rate 1973 Target Allocations 323529 Future Allocations 0 Overall 2521497 Last Notification 2
MEMORYBROKER_FOR_CACHE (internal) Pages …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search sql-server-2008-r2

15
推荐指数
1
解决办法
6436
查看次数

为什么我的 EXISTS 查询执行索引扫描而不是索引查找?

我正在优化一些查询。

对于下面的查询,

SET STATISTICS IO ON;
DECLARE @OrderStartDate DATETIME2 = '27 feb 2016';
DECLARE @OrderEndDate  DATETIME2 = '28 feb 2016';

SELECT  o.strBxOrderNo
        , o.sintOrderStatusID
        , o.sintOrderChannelID
        , o.sintOrderTypeID
        , o.sdtmOrdCreated
        , o.sintMarketID
        , o.strOrderKey
        , o.strOfferCode
        , o.strCurrencyCode
        , o.decBCShipFullPrice
        , o.decBCShipFinal
        , o.decBCShipTax
        , o.decBCTotalAmount
        , o.decWrittenTotalAmount
        , o.decBCWrittenTotalAmount
        , o.decBCShipOfferDisc
        , o.decBCShipOverride
        , o.decTotalAmount
        , o.decShipTax
        , o.decShipFinal
        , o.decShipOverride
        , o.decShipOfferDisc
        , o.decShipFullPrice
        , o.lngAccountParticipantID
        , CONVERT(DATE, o.sdtmOrdCreated, 120) as OrderCreatedDateConverted
FROM    tablebackups.dbo.tblBOrder o
WHERE   o.sdtmOrdCreated >= …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization index-tuning sql-server-2014 query-performance

15
推荐指数
3
解决办法
2488
查看次数

如何使用子查询进行 SQL 删除

我们的一位开发人员添加了以下代码以从表中删除重复记录:

DELETE  SubQuery

FROM
(
    SELECT  ID
            ,FK1
            ,FK2
            ,CreatedDateTime
            ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber

    FROM    Table
)
AS SubQuery

WHERE   RowNumber > 1
Run Code Online (Sandbox Code Playgroud)

在查看代码时,我认为它不起作用,但是在我们的测试环境 (SQL 2014) 中测试它表明它起作用了!

SQL 如何知道解析子查询并从中删除记录table

sql-server subquery sql-server-2014

15
推荐指数
1
解决办法
3577
查看次数

DBCC FREEPROCCACHE 和 DBCC FREESYSTEMCACHE('SQL Plans') 都不做任何事情来释放 CACHESTORE_SQLCP 内存

CACHESTORE_SQLCP Sql 计划在几天后占用 > 38 GB。

我们已经在运行“优化临时工作负载”选项。(实体框架和自定义报告创建了很多临时!)

具有多可用区镜像的 AWS RDS 上的 SQL Server 2016 SE 3.00.2164.0.v1

当我运行时:

DBCC FREESYSTEMCACHE('SQL Plans');
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Run Code Online (Sandbox Code Playgroud)

它似乎没有清除它:

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048
Run Code Online (Sandbox Code Playgroud)

我在启用查询存储的情况下运行,但我禁用了它以查看是否有任何干扰,它似乎没有帮助,但我将其关闭。

真正奇怪的是

SELECT COUNT(*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)

是 1-3 左右(它似乎只显示显示当前正在运行的查询),即使所有内存都已保留,甚至在我尝试清除任何内容之前。我错过了什么?

CACHESTORE_SQLCP 占用了所有可用内存的 60% 以上,这是一个问题,因为偶尔会发生内存等待。此外,我们不得不在周末终止一个持续 4 小时的例行 DBCC CHECKDB,因为内存不足导致等待(它立即完成,没有错误,打开 PHYSICAL_ONLY)。

有没有办法回收这些内存(除了每晚重启!?)?

内存消耗图 内存消耗图表

从评论/答案更新

当我跑

SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization memory sql-server-2016 amazon-rds

15
推荐指数
1
解决办法
2412
查看次数

只读文件组中的列存储索引阻止 CheckDB

如果文件组包含列存储索引,则似乎设置文件组以read_only防止dbcc checkdb整个数据库。尝试运行checkdbcheckfilegroup对于数据库中的任何文件组,包括读写辅助文件和[PRIMARY])时,将返回以下错误...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Run Code Online (Sandbox Code Playgroud)

是否有支持在只读文件组中存储列存储数据的方法?还是在这种情况下我无法进行完整性检查?

再现

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table …
Run Code Online (Sandbox Code Playgroud)

sql-server filegroups columnstore dbcc-checkdb read-only-database

15
推荐指数
1
解决办法
412
查看次数

datetime 和 datetime2 的比较不正确

我知道隐式类型转换不是一个好习惯。但当较低的值突然变得较高时,这确实是意想不到的行为。

declare @LastSelectedDate DATETIME = '2021-11-09 13:52:29.187'
declare @LastSelectedDate_1 DATETIME2(7) = '2021-11-09 13:52:29.1866667'


SELECT IIF(@LastSelectedDate_1 > CAST(@LastSelectedDate AS DATETIME2), 1, 0)
SELECT IIF(@LastSelectedDate_1 > @LastSelectedDate, 1, 0)
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我遗漏了什么?我正在使用 SQL Server 2016。

sql-server datetime datetime2 sql-server-2016

15
推荐指数
1
解决办法
2469
查看次数