标签: sql-server-2012

如何使SSMS大写关键字

我最近开始使用 Management Studio 2012。使用 MySQL Workbench 时,一个方便的功能是我可以全部使用小写字母,任何保留字(如SELECT, INSERT)都会自动转换为大写字母。如何在 SSMS 中复制此行为?

sql-server ssms sql-server-2012

25
推荐指数
4
解决办法
3万
查看次数

SQL Server 的 READ COMMITTED SNAPSHOT 与 SNAPSHOT

我正在研究 SQL ServerREAD COMMITTED SNAPSHOTSNAPSHOT隔离级别之间的差异,并发现以下资源:

选择基于行版本控制的隔离级别

对于大多数应用程序,由于以下原因,建议使用行版本控制读取提交隔离而不是快照隔离:

  • 与快照隔离相比,它消耗的 tempdb 空间更少。

  • 快照隔离容易受到更新冲突的影响,这些冲突不适用于使用行版本控制的已提交读隔离。当一个在快照隔离下运行的事务读取数据然后被另一个事务修改时,快照事务对相同数据的更新会导致更新冲突,事务终止并回滚。这不是使用行版本控制的已提交读隔离的问题。

我对这些主题有些陌生,但我似乎无法理解上面链接中的两个要点。

  1. 为什么这些模式的 tempdb 空间会不同?一个存储比另一个更精细的版本控制吗?

  2. 为什么快照隔离更容易受到更新冲突的影响?

sql-server sql-server-2012

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

为什么 0 等于空字符串?

我需要一些帮助来找出以下T-SQL语句返回的原因1(true):

SELECT IIF( 0 = '', 1, 0)
Run Code Online (Sandbox Code Playgroud)

我猜有人改变了一个ANSI选项,比如SET ANSI_NULLS导致这种行为的其他东西。

我的问题是我加入了一些值,在最后一行集中我有由0''值连接的值,这是不正确的。

sql-server t-sql sql-server-2012

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

使用 T-SQL 测试字符串是否为回文

我是 T-SQL 的初学者。我想确定输入字符串是否是回文,如果不是,则输出 = 0,如果是,则输出 = 1。我仍在弄清楚语法。我什至没有收到错误消息。我正在寻找不同的解决方案和一些反馈,以更好地理解和了解 T-SQL 的工作原理,从而变得更好——我仍然是一名学生。

在我看来,关键思想是将最左边和最右边的字符相互比较,检查是否相等,然后继续比较左边第二个字符和倒数第二个字符,依此类推。我们做一个循环:如果字符彼此相等,我们继续。如果到达终点,则输出 1,否则,输出 0。

请您批评一下:

CREATE function Palindrome(
    @String  Char
    , @StringLength  Int
    , @n Int
    , @Palindrome BIN
    , @StringLeftLength  Int
)
RETURNS Binary
AS
BEGIN
SET @ n=1
SET @StringLength= Len(String)

  WHILE @StringLength - @n >1

  IF
  Left(String,@n)=Right(String, @StringLength)

 SET @n =n+1
 SET @StringLength =StringLength -1

 RETURN @Binary =1

 ELSE RETURN @Palindrome =0

END
Run Code Online (Sandbox Code Playgroud)

我认为我在正确的轨道上,但我还有很长的路要走。有任何想法吗?

sql-server t-sql sql-server-2012 functions

24
推荐指数
8
解决办法
7790
查看次数

消除会降低性能的键查找(集群)运算符

如何消除执行计划中的 Key Lookup (Clustered) 运算符?

tblQuotes已经有一个聚集索引 (on QuoteID) 和 27 个非聚集索引,所以我不想再创建了。

我将聚集索引列QuoteID放在我的查询中,希望它会有所帮助 - 但不幸的是仍然相同。

执行计划在这里

或查看它:

在此处输入图片说明

这是 Key Lookup 运算符所说的:

在此处输入图片说明

询问:

declare
        @EffDateFrom datetime ='2017-02-01',
        @EffDateTo   datetime ='2017-08-28'

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

IF OBJECT_ID('tempdb..#Data') IS NOT NULL
    DROP TABLE #Data 
CREATE TABLE #Data
(
    QuoteID int NOT NULL,   --clustered index

    [EffectiveDate] [datetime] NULL, --not indexed
    [Submitted] [int] NULL,
    [Quoted] [int] NULL,
    [Bound] [int] NULL,
    [Exonerated] [int] NULL,
    [ProducerLocationId] [int] …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2012 bookmark-lookup query-performance

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

FlushCache 消息在特定时间出现在日志中

最近我们遇到了很多数据库性能问题,我一直在尝试找出原因。我们没有 DBA(我是一名软件开发人员),所以我只是在摸索,而且我在网上找到的大部分内容对我来说就像一门外语。

我们每天早上都会重新启动 SQL Server,因为这是它在工作日运行的唯一方式。我注意到每天早上 5 点左右,我们开始每两分钟在日志中收到一条消息:

FlushCache:在 97168 毫秒内清理了 11848 个 buf,其中 7432 次写入(避免了 8139 个新的脏 buf)用于 db 9:0

最后一个未完成的目标:4,avgWriteLatency 32

平均吞吐量:0.72 MB/秒,I/O 饱和度:11635,上下文切换 18849

当然,每次的数字都不同,但是在我重新启动服务器之前,它以该模式一遍又一遍地传递相同的消息。我不知道如何解释这一点,我一直在尝试谷歌搜索,我收集到的只是这意味着 I/O 可能有问题,并且某些事情花费的时间比预期的要长。我们最近改用SSD,所以我认为这应该不是写入问题。

任何人都可以对此有所了解吗?

sql-server sql-server-2012

23
推荐指数
1
解决办法
6万
查看次数

为什么 SQL Server 2012 Express 在我的服务器上使用 9.5GB 的 RAM?

我正在构建一个应用程序,我计划在其中嵌入 SQL Server 2012 Express 作为主数据存储。在我的开发机器(具有 3GB RAM 的 Win7-32​​)上进行测试时,我从未观察sqlservr.exe到使用超过 1GB RAM的过程,正如我对已发布的 SQL Server Express 版硬件扩展限制所期望的那样。

然后我将我的应用程序移到一台服务器级机器(Win Server 2008R2 64 位,16GB RAM)来评估它的性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约 9.5GB 的 RAM 并停留在那里。

我重新启动了几次,看看是否会有任何影响,但每次,该过程都迅速恢复到 ~9.5GB。现在我当然很高兴让 SQL Server Express 使用我的 RAM,但我想知道这是否是预期的行为,以便我不会依赖基于不正确的 RAM 使用的性能级别。

仅供参考,根据SELECT @@VERSION,我的服务器机器上的 SQL Server 版本是:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)

我的 9.5GB 号码来自任务管理器中的“私人工作集”号码。来自 …

sql-server memory sql-server-2012 sql-server-express

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

使用 DTS 导入/导出向导导入数据时如何处理 FK 约束?

我正在尝试使用 SQL Server 导入和导出向导将数据从我的生产数据库复制到我的开发数据库,​​但是当我这样做时失败并出现错误“插入语句与外键约束冲突”我有超过 40 个表FK 约束,是否有一些简单的方法可以解决这个问题,而不必编写删除约束/添加约束脚本?

编辑:我刚刚发现在我正在运行的 SQL Server 的 Web 版中,DTS 不会让您保存包。

sql-server sql-server-2012

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

有没有办法在TSQL中生成表创建脚本?

有没有办法纯粹在 T-SQL 中从现有表生成创建脚本(即不使用 SMO,因为 T-SQL 无法访问 SMO)。假设一个存储过程接收一个表名并返回一个包含给定表的创建脚本的字符串?

现在让我描述一下我面临的情况,因为可能有不同的方法来解决这个问题。我有一个包含几十个数据库的实例。这些数据库都具有相同的架构、相同的表、索引等。它们是作为第三方软件安装的一部分创建的。我需要有一种与他们合作的方法,以便我可以以特别的方式从他们那里收集数据。dba.se 的好人已经在这里帮助了我如何在不同的数据库中创建触发器?

目前我需要找到一种方法来从所有数据库的表中进行选择。我已将所有数据库名称记录到一个名为的表中,Databasees并编写了以下脚本来对所有数据库执行 select 语句:

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp

select * into #tmp from Database1.dbo.Table1 where 1=0
DECLARE @statement nvarchar(max) = 
  N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1'

DECLARE @LastDatabaseID INT
SET @LastDatabaseID = 0

DECLARE @DatabaseNameToHandle varchar(60)
DECLARE @DatabaseIDToHandle int

SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No

WHILE @DatabaseIDToHandle …
Run Code Online (Sandbox Code Playgroud)

sql-server dynamic-sql t-sql sql-server-2012

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

检查更改索引重组/重建的进度

提交更改索引重组/重建时如何检查进度/状态?

sql-server dmv sql-server-2012

22
推荐指数
1
解决办法
6万
查看次数