我已经从这里下载了基于 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)
由于这是(或多或少)微软官方文档,我假设这是我做错的事情,但我无法弄清楚它是什么。
我是一名开发人员,而不是一名 DBA(我很担心这是在展示)。我正在尝试在我的家用计算机(名为John-PC)上使用 SQL Server 2014 Express 运行 Report Builder 3.0,但无法运行我的报告。
我无意中创建的用户/登录组合user = John-PC和login = John-PC\John。当我尝试删除条目时:
Drop Login John-PC\John
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
“-”附近的语法不正确。
我认为问题在于我的计算机名称中的连字符。
sys.server_principals但收到一个错误,我无法进行临时更改)。John_PC还是会产生许多我无法想象的其他问题?我有一个查询,它在SQL Server 2012中运行800 毫秒,在 SQL Server 2014中运行大约170 秒。我认为我已经将范围缩小到Row Count Spool运营商的基数估计不佳。我已经阅读了一些关于假脱机操作符的内容(例如,这里和这里),但我仍然无法理解一些事情:
Row Count Spool运算符?我认为正确性没有必要,那么它试图提供什么特定的优化?Row Count Spool操作符的连接会删除所有行?注意:我可以将查询重写为 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
在运行 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) 我不确定我是否为这个问题选择了正确的标题。我真正想要的是,给定一个单独的 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
我在 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 2014,最大内存设置为 6GB(物理内存为 8GB)。
在目标服务器内存为6GB,有时,然后回落到总的服务器内存(约5.3GB,从未达到6GB)。我用committed_kb在sys.dm_os_sys_info检查SQL Server所使用的内存。
当我监视sys.dm_os_buffer_descriptors 时,我看到页面已从缓存中删除 - 但仍有 700MB 的内存。如果不需要内存,您如何解释从缓存中删除页面的事实?我希望 SQL Server 仅在需要内存时删除页面。
解除分配的临时表在此服务器上不是问题。我的 PLE 是 3632。过程缓存是 2182 MB。
我希望只有在没有剩余内存时才会删除页面,但是我有 700MB 可用空间还是我误解了这一点?
有人可以尝试解释这种行为吗?
SQL Server 也在从磁盘读取,所以我想我可能会得出结论,并非所有需要的页面都在内存中。
我做了一些更多的研究,我将大量页面从磁盘读取到内存中,并在读取过程中注意到任务管理器中的一些内容:
就像 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) 我想知道以下两种方法之间的区别是什么:
GETUTCDATE()-2
Run Code Online (Sandbox Code Playgroud)
和
DATEADD(d,-2,GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)
我想使用DATEADD是正确的方法,但想知道为什么?
我已经尝试Tasks>Generate Scripts...并在高级脚本选项中设置了“脚本登录”,但我在输出中得到了这个:
/* For security reasons the login is created disabled and with a random password. */
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以使用密码对这些登录进行脚本编写,或者使用其他方法将登录从 2008R2 实例转移到 2014 实例?
鉴于以下
-- 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 ×10
sql-server-2014 ×10
t-sql ×3
memory ×1
partitioning ×1
performance ×1
permissions ×1
restore ×1
ssms ×1