我的业务是制作非关键任务的网站和应用程序- 例如.银行软件,太空飞行,重症监护应用等.你明白了.
那么,有了这个庞大的免责声明,在一些Sql语句中使用NOLOCK提示是不是很糟糕?几年前,一位Sql管理员建议我应该使用NOLOCK,如果我对"脏读"感到满意,这会让我的系统性能提高一些,因为每次读取都没有锁定表/行/不管.
我还被告知,如果我遇到死锁,这是一个很好的解决方案.所以,我开始关注这个想法几年,直到一个Sql大师帮我一些随机代码并注意到我的sql代码中的所有NOLOCKS.我被礼貌地责骂,他试图向我解释(为什么这不是一件好事)而且我迷路了.我觉得他的解释的本质是'它是一个解决更严重问题的创可贴解决方案......特别是如果你遇到了死锁.因此,修复问题的根源.
我最近做了一些谷歌搜索,并发现了这篇文章.
那么,有些sql db guru sensei的请赐教吗?
是否有为SQL Server 编写的SP(不PATINDEX,没有扩展LIKE,纯xp_)的正则表达式库?
(应该与共享主机一起使用)
编辑:
谢谢我知道sps,SPxp_ PATINDEXCLR`解决方案
我也知道它不是最好的地方LIKE,问题是理论:)
功能减少也被接受
假设我有一个SQL语句,它在语法和语义上都是正确的,因此它会执行.
在Management Studio(或任何其他查询工具)中,我如何测试SQL语句,如果我注意到它们破坏了某些内容,则回滚(在单独的查询中?)
我有一个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.
任何人都可以向我解释这个吗?另外,我想知道以这种方式创建数据库是否是最佳做法?
有没有"简单"的方法来做到这一点,或者我需要传递一个带有"OUTPUT ... INTO"语法的表变量?
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
Run Code Online (Sandbox Code Playgroud) 我有一张这样的桌子......
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) 使用之间有什么区别
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将在默认文件组上创建插入表(如果它尚不存在),并且此语句的日志记录取决于恢复数据库的模型.
编辑:我已经声明我知道SELECT INTO ...创建一个不存在的表.我想知道的是SQL包含这个语句是有原因的,它是什么?它是在幕后插入行做的不同的事情,还是只是在a CREATE TABLE和INSERT INTO.之上的语法糖.
我有一个SQL Server 2008 R2列包含一个字符串,我需要用逗号分隔.我在StackOverflow上看到了很多答案,但它们都不适用于R2.我确保我对任何拆分函数示例都有选择权限.任何帮助非常感谢.
免责声明:我已经找到了问题(我认为),但我想将此问题添加到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,如果重要的话.)
我有MS SQL 2008 R2,500个数据库.什么是查询所有数据库大小的最有效,最简单和"现代"的方法.
输出应该有列:
t-sql ×10
sql-server ×9
sql ×6
collation ×1
database ×1
nolock ×1
pivot ×1
regex ×1
split ×1
transactions ×1