标签: sql-server-2014

多语句事务中不允许使用 ALTER DATABASE 语句

我已经从这里下载了基于 AdventureWorks 的内存示例,并遵循了随附文档中描述的所有步骤。但是,当我尝试在 SQL Server Management Studio 中运行脚本时,我收到错误消息:

多语句事务中不允许使用 ALTER DATABASE 语句

错误指向第 9 行,即:

IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX')
    ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] 
    CONTAINS MEMORY_OPTIMIZED_DATA
GO
Run Code Online (Sandbox Code Playgroud)

由于这是(或多或少)微软官方文档,我假设这是我做错的事情,但我无法弄清楚它是什么。

sql-server in-memory-database sql-server-2014

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

我的计算机名称中的连字符导致 T-SQL 错误

我是一名开发人员,而不是一名 DBA(我很担心这是在展示)。我正在尝试在我的家用计算机(名为John-PC)上使用 SQL Server 2014 Express 运行 Report Builder 3.0,但无法运行我的报告。

我无意中创建的用户/登录组合user = John-PClogin = John-PC\John。当我尝试删除条目时:

Drop Login John-PC\John
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

“-”附近的语法不正确。

我认为问题在于我的计算机名称中的连字符。

  1. 有没有办法绕过语法错误?
  2. 是否有另一种更改或删除用户的方法(我尝试删除sys.server_principals但收到一个错误,我无法进行临时更改)。
  3. 我可以以某种方式给 Report Builder 一个新的用户名/登录名吗?
  4. 如果以上都不是,我可以将我的计算机名称更改为John_PC还是会产生许多我无法想象的其他问题?

sql-server t-sql sql-server-2014

13
推荐指数
2
解决办法
3684
查看次数

查询在 SQL Server 2014 中慢 100 倍,行计数假脱机行估计罪魁祸首?

我有一个查询,它在SQL Server 2012中运行800 毫秒,在 SQL Server 2014中运行大约170 秒。我认为我已经将范围缩小到Row Count Spool运营商的基数估计不佳。我已经阅读了一些关于假脱机操作符的内容(例如,这里这里),但我仍然无法理解一些事情:

  • 为什么这个查询需要一个Row Count Spool运算符?我认为正确性没有必要,那么它试图提供什么特定的优化?
  • 为什么 SQL Server 估计到Row Count Spool操作符的连接会删除所有行?
  • 这是 SQL Server 2014 中的错误吗?如果是这样,我将在 Connect 中归档。但我想先有更深入的了解。

注意:我可以将查询重写为 aLEFT JOIN或向表添加索引,以便在 SQL Server 2012 和 SQL Server 2014 中实现可接受的性能。所以这个问题更多地是关于深入理解这个特定的查询和计划,而不是关于如何用不同的方式表达查询。


慢查询

请参阅此 Pastebin以获取完整的测试脚本。这是我正在查看的特定测试查询:

-- Prune any existing customers from the set of potential new customers
-- This query is much slower than …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2014 cardinality-estimates query-performance

13
推荐指数
3
解决办法
4673
查看次数

无法在 SSMS 2014 中打开还原数据库向导

在运行 Windows Server 2012 R2 的开发机器上,我刚刚将 SQL Server 从 2012 升级到 2014。

使用 SQL Server Management Studio 2014,当我右键单击一个数据库并且Tasks -> Restore -> Database...什么也没有发生时。“还原数据库”向导未按预期显示。

事件查看器中没有错误或崩溃。光标甚至不会变成沙漏。

使用 T-SQL 恢复工作正常,如果我回去使用 SSMS 2012,它工作正常。关于如何让向导在 SSMS 2014 中工作的任何想法?

我在两个版本的 SSMS 中连接到相同的 SQL Server 实例,并且我尝试以管理员身份运行 SSMS。

它是服务包 1:

Microsoft SQL Server Management Studio 12.0.4100.1
Microsoft Analysis Services Client Tools 12.0.4100.1
Microsoft Data Access Components (MDAC) 6.3.9600.17415
Microsoft MSXML 3.0 5.0 6.0 
Microsoft Internet Explorer 9.11.9600.18125
Microsoft .NET Framework 4.0.30319.34209
Operating System 6.3.9600
Run Code Online (Sandbox Code Playgroud)

sql-server ssms restore sql-server-2014

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

我的用户属于哪些 AD 组登录?

我不确定我是否为这个问题选择了正确的标题。我真正想要的是,给定一个单独的 Windows AD 用户,我想找出可以访问此服务器中特定数据库的 Windows AD 组(登录名)的列表

当我运行以下查询时

select
    name,
    principal_id,
    type,
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    owning_principal_id,
    sid,
    is_fixed_role
from sys.database_principals
Run Code Online (Sandbox Code Playgroud)

在我的服务器中

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Windows NT 6.1(内部版本 7601:Service Pack 1)上的 Microsoft Corporation 标准版(64 位)

我得到以下结果(部分列表):

在此处输入图片说明

我需要知道特定登录名的所有权限。此登录名可以通过 AD 组访问我的服务器/数据库。

1) 从上面的列表中,我的登录名属于哪些 AD 组?

在此处输入图片说明

我一直在下面这样做,但我真的很想找出该用户所属的 AD 组(根据上图可以访问该服务器)的列表。

首先,我以相关用户身份执行

    EXECUTE AS LOGIN='mycompany\HThorne'

    DECLARE @User VARCHAR(20)
    SELECT @USER = SUBSTRING(SUSER_SNAME(), 
CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))
Run Code Online (Sandbox Code Playgroud)

我确保我拥有正确的凭据

    SELECT   @USER …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions sql-server-2008-r2 active-directory sql-server-2014

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

修剪空白(空格、制表符、换行符)

我在 SQL Server 2014 上,我需要从列内容的开头和结尾清除空格,其中空格可以是简单的空格、制表符或换行符(\n\r\n);例如

'    this content    '                          should become 'this content'
'  \r\n   \t\t\t this \r\n content \t  \r\n   ' should become 'this \r\n content'
Run Code Online (Sandbox Code Playgroud)

等等。

我只能实现第一个案例

UPDATE table t SET t.column = LTRIM(RTRIM(t.column))
Run Code Online (Sandbox Code Playgroud)

但对于其他情况,它不起作用。

sql-server t-sql sql-server-2014 string-manipulation

13
推荐指数
1
解决办法
5万
查看次数

SQL Server 未使用所有内存

我有 SQL Server 2014,最大内存设置为 6GB(物理内存为 8GB)。

目标服务器内存为6GB,有时,然后回落到总的服务器内存(约5.3GB,从未达到6GB)。我用committed_kbsys.dm_os_sys_info检查SQL Server所使用的内存。

当我监视sys.dm_os_buffer_descriptors 时,我看到页面已从缓存中删除 - 但仍有 700MB 的内存。如果不需要内存,您如何解释从缓存中删除页面的事实?我希望 SQL Server 仅在需要内存时删除页面。

解除分配的临时表在此服务器上不是问题。我的 PLE 是 3632。过程缓存是 2182 MB。

我希望只有在没有剩余内存时才会删除页面,但是我有 700MB 可用空间还是我误解了这一点?

有人可以尝试解释这种行为吗?

SQL Server 也在从磁盘读取,所以我想我可能会得出结论,并非所有需要的页面都在内存中。

我做了一些更多的研究,我将大量页面从磁盘读取到内存中,并在读取过程中注意到任务管理器中的一些内容:

  • 使用的内存从 7.0GB -> 7.2GB -> 7.0GB -> 7.2GB ->...
  • Sqlservr.exe 从 5.3GB -> 5.5GB -> 5.3GB -> 5.5GB -> ...

就像 Windows 不允许sqlservr.exe增长到 6GB 一样。

我运行了 Shanky 提供的查询:

select
(physical_memory_in_use_kb/1024) Physical_Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(Virtual_address_committed_kb/1024 )Total_Memory_in_MB,--RAM+ …
Run Code Online (Sandbox Code Playgroud)

sql-server memory sql-server-2014

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

GETUTCDATE()-2 与 DATEADD(d,-2,GETUTCDATE())

我想知道以下两种方法之间的区别是什么:

 GETUTCDATE()-2  
Run Code Online (Sandbox Code Playgroud)

  DATEADD(d,-2,GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

我想使用DATEADD是正确的方法,但想知道为什么?

sql-server t-sql sql-server-2014

13
推荐指数
2
解决办法
2452
查看次数

如何使用密码将登录名从 2008R2 转移到 2014?

我已经尝试Tasks>Generate Scripts...并在高级脚本选项中设置了“脚本登录”,但我在输出中得到了这个:

/* For security reasons the login is created disabled and with a random password. */
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以使用密码对这些登录进行脚本编写,或者使用其他方法将登录从 2008R2 实例转移到 2014 实例?

sql-server sql-server-2008-r2 sql-server-2014

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

Switching Data In Fails with“允许目标表上的检查约束或分区函数不允许的值”

鉴于以下

-- table ddl
create table dbo.f_word(
    sentence_id int NULL,
    sentence_word_id int NULL,
    word_id int NULL,
    lemma_id int NULL,
    source_id int NULL,
    part_of_speech_id int NULL,
    person_id int NULL,
    gender_id int NULL,
    number_id int NULL,
    tense_id int NULL,
    voice_id int NULL,
    mood_id int NULL,
    case_id int NULL,
    degree_id int NULL,
    citation nvarchar(100) NULL
);
-- create partition function
create partition function pf_f_word_source_id (int)
as range left for values 
(
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    15,16,17,18,19,20,21,22,23
);

-- create the partition scheme
create partition scheme ps_f_word …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning sql-server-2014

12
推荐指数
1
解决办法
4724
查看次数