标签: t-sql

是NOLOCK(Sql Server提示)不好的做法吗?

我的业务是制作关键任务的网站和应用程序- 例如.银行软件,太空飞行,重症监护应用等.你明白了.

那么,有了这个庞大的免责声明,在一些Sql语句中使用NOLOCK提示是不是很糟糕?几年前,一位Sql管理员建议我应该使用NOLOCK,如果我对"脏读"感到满意,这会让我的系统性能提高一些,因为每次读取都没有锁定表/行/不管.

我还被告知,如果我遇到死锁,这是一个很好的解决方案.所以,我开始关注这个想法几年,直到一个Sql大师帮我一些随机代码并注意到我的sql代码中的所有NOLOCKS.我被礼貌地责骂,他试图向我解释(为什么这不是一件好事)而且我迷路了.我觉得他的解释的本质是'它是一个解决更严重问题的创可贴解决方案......特别是如果你遇到了死锁.因此,修复问题的根源.

我最近做了一些谷歌搜索,并发现了这篇文章.

那么,有些sql db guru sensei的请赐教吗?

sql t-sql sql-server nolock sql-server-2008

123
推荐指数
5
解决办法
10万
查看次数

T-SQL中的SQL Server正则表达式

是否有为SQL Server 编写的SP(不PATINDEX,没有扩展LIKE,纯xp_)的正则表达式库?

(应该与共享主机一起使用)

编辑:

  • 谢谢我知道sps,SPxp_ PATINDEXCLR`解决方案

  • 我也知道它不是最好的地方LIKE,问题是理论:)

  • 功能减少也被接受

regex t-sql sql-server

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

在MS SQL Server Management Studio中处理事务的最佳方法

假设我有一个SQL语句,它在语法和语义上都是正确的,因此它会执行.

在Management Studio(或任何其他查询工具)中,我如何测试SQL语句,如果我注意到它们破坏了某些内容,则回滚(在单独的查询中?)

sql t-sql transactions

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

'COLLATE SQL_Latin1_General_CP1_CI_AS'有什么作用?

我有一个SQL查询来在SQLServer中创建数据库,如下所示:

create database yourdb
on
( name = 'yourdb_dat',
  filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf',
  size = 25mb,
  maxsize = 1500mb,
  filegrowth = 10mb )
log on
( name = 'yourdb_log',
  filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdblog.ldf',
  size = 7mb,
  maxsize = 375mb,
  filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go
Run Code Online (Sandbox Code Playgroud)

它运行正常.

虽然SQL的其余部分很清楚,但我对它的功能非常困惑COLLATE SQL_Latin1_General_CP1_CI_AS.

任何人都可以向我解释这个吗?另外,我想知道以这种方式创建数据库是否是最佳做法?

t-sql database sql-server collation

122
推荐指数
5
解决办法
31万
查看次数

SQL Server输出子句变为标量变量

有没有"简单"的方法来做到这一点,或者我需要传递一个带有"OUTPUT ... INTO"语法的表变量?

DECLARE @someInt int

INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

122
推荐指数
4
解决办法
9万
查看次数

TSQL Pivot没有聚合函数

我有一张这样的桌子......

CustomerID   DBColumnName   Data
--------------------------------------
1            FirstName      Joe
1            MiddleName     S
1            LastName       Smith
1            Date           12/12/2009
2            FirstName      Sam
2            MiddleName     S
2            LastName       Freddrick
2            Date           1/12/2009
3            FirstName      Jaime
3            MiddleName     S
3            LastName       Carol
3            Date           12/1/2009
Run Code Online (Sandbox Code Playgroud)

我想要这个......

这可能使用PIVOT吗?

CustomerID  FirstName   MiddleName          LastName        Date
----------------------------------------------------------------------
1           Joe             S               Smith           12/12/2009
2           Sam             S               Freddrick       1/12/2009
3           Jaime           S               Carol           12/1/2009
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server pivot pivot-without-aggregate

121
推荐指数
6
解决办法
17万
查看次数

插入INTO与SELECT INTO

使用之间有什么区别

SELECT ... INTO MyTable FROM...
Run Code Online (Sandbox Code Playgroud)

INSERT INTO MyTable (...)
SELECT ... FROM ....
Run Code Online (Sandbox Code Playgroud)

从BOL [ INSERT,SELECT ... INTO ],我知道使用SELECT ... INTO将在默认文件组上创建插入表(如果它尚不存在),并且此语句的日志记录取决于恢复数据库的模型.

  1. 哪种说法更可取?
  2. 还有其他性能影响吗?
  3. SELECT ... INTO over INSERT INTO ...的一个很好的用例是什么?

编辑:我已经声明我知道SELECT INTO ...创建一个不存在的表.我想知道的是SQL包含这个语句是有原因的,它是什么?它是在幕后插入行做的不同的事情,还是只是在a CREATE TABLEINSERT INTO.之上的语法糖.

t-sql sql-server sql-server-2008

121
推荐指数
6
解决办法
11万
查看次数

T-SQL拆分字符串

我有一个SQL Server 2008 R2列包含一个字符串,我需要用逗号分隔.我在StackOverflow上看到了很多答案,但它们都不适用于R2.我确保我对任何拆分函数示例都有选择权限.任何帮助非常感谢.

sql t-sql sql-server split sql-server-2008

121
推荐指数
8
解决办法
36万
查看次数

SQL"选择不在子查询中的位置"不返回任何结果

免责声明:我已经找到了问题(我认为),但我想将此问题添加到Stack Overflow,因为我无法(轻松)在任何地方找到它.此外,有人可能会比我更好的答案.

我有一个数据库,其中一个表"Common"被其他几个表引用.我想看看Common表中的哪些记录是孤立的(即没有来自任何其他表的引用).

我运行了这个查询:

select *
from Common
where common_id not in (select common_id from Table1)
and common_id not in (select common_id from Table2)
Run Code Online (Sandbox Code Playgroud)

我知道有孤立的记录,但没有返回任何记录.为什么不?

(这是SQL Server,如果重要的话.)

sql t-sql sql-server

120
推荐指数
5
解决办法
26万
查看次数

SQL Server 2008:如何查询所有数据库大小?

我有MS SQL 2008 R2,500个数据库.什么是查询所有数据库大小的最有效,最简单和"现代"的方法.

输出应该有列:

  • 数据库名称
  • DataFilesSize
  • LogFilesSize

sql t-sql sql-server sql-server-2008-r2

120
推荐指数
7
解决办法
31万
查看次数