标签: sql-server-2005

SQL Server中Group By,Having和Where子句的执行顺序是什么?

当我们使用GROUP BY和HAVING与WHERE子句时,我只是混淆了SQL查询的执行顺序.先执行哪一个?什么是序列?

sql sql-server sql-server-2005

83
推荐指数
4
解决办法
12万
查看次数

SQL Server连接字符串中"初始目录"的重点是什么?

我见过的每个SQL Server连接字符串都是这样的:

Data Source=MyLocalSqlServerInstance;Initial Catalog=My Nifty Database;
    Integrated Security=SSPI;
Run Code Online (Sandbox Code Playgroud)

我是否需要初始目录设置?(显然不是,因为我正在处理的应用似乎没有它.)

那么,那是什么呢?

database sql-server connection-string database-connection sql-server-2005

83
推荐指数
3
解决办法
15万
查看次数

诊断SQL Server 2005中的死锁

我们在Stack Overflow SQL Server 2005数据库中看到了一些有害但罕见的死锁条件.

我附上了探查器,使用这篇关于解决死锁问题的优秀文章设置了一个跟踪配置文件,并捕获了一堆示例.奇怪的是,死锁写入始终是相同的:

UPDATE [dbo].[Posts]
SET [AnswerCount] = @p1, [LastActivityDate] = @p2, [LastActivityUserId] = @p3
WHERE [Id] = @p0
Run Code Online (Sandbox Code Playgroud)

另一个死锁声明各不相同,但它通常是对posts表的一些简单,简单的读取.这个人总是在僵局中被杀死.这是一个例子

SELECT
[t0].[Id], [t0].[PostTypeId], [t0].[Score], [t0].[Views], [t0].[AnswerCount], 
[t0].[AcceptedAnswerId], [t0].[IsLocked], [t0].[IsLockedEdit], [t0].[ParentId], 
[t0].[CurrentRevisionId], [t0].[FirstRevisionId], [t0].[LockedReason],
[t0].[LastActivityDate], [t0].[LastActivityUserId]
FROM [dbo].[Posts] AS [t0]
WHERE [t0].[ParentId] = @p0
Run Code Online (Sandbox Code Playgroud)

要非常清楚,我们没有看到写/写死锁,而是读/写.

我们目前混合使用LINQ和参数化SQL查询.我们已添加with (nolock)到所有SQL查询中.这可能对一些人有所帮助.我们昨天修复了一个(非常)写得不好的徽章查询,每次运行时间超过20秒,每分钟运行一次.我希望这是一些锁定问题的根源!

不幸的是,我在大约2小时前遇到了另一个死锁错误.同样的症状,同样的罪魁祸首写.

真正奇怪的是,您在上面看到的锁定写入SQL语句是非常特定的代码路径的一部分.它在向问题添加新答案时执行 - 它使用新答案计数和最后日期/用户更新父问题.显然,这与我们正在进行的大量读取相比并不常见!据我所知,我们在应用程序的任何地方都没有进行大量的写操作.

我意识到NOLOCK是一个巨大的锤子,但我们在这里运行的大多数查询都不需要那么准确.如果您的用户个人资料已过期几秒,您会关心吗?

正如Scott Hanselman在这里讨论的那样,将NOLOCK与Linq一起使用有点困难.

我们正在调整使用的想法

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Run Code Online (Sandbox Code Playgroud)

在基本数据库上下文中,以便我们所有的LINQ查询都有此设置.没有它,我们必须在3-4行事务代码块中包装我们所做的每个LINQ调用(好吧,简单的读取,这是绝大多数),这很难看.

我想我有点沮丧的是,SQL 2005中的琐碎读取可能会使写入死锁.我可以看到写/写死锁是一个很大的问题,但 …

sql-server deadlock sql-server-2005

82
推荐指数
8
解决办法
3万
查看次数

如何将字符串转换为日期T-SQL?

如何在T-SQL中将字符串转换为日期?

我的测试用例是字符串: '24.04.2012'

t-sql sql-server-2005

82
推荐指数
5
解决办法
30万
查看次数

简单的DateTime sql查询

如何在一定范围内查询DateTime数据库字段?

我正在使用SQL SERVER 2005

错误代码如下

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM
Run Code Online (Sandbox Code Playgroud)

请注意,我需要在特定时间范围内获取行.例如,10分钟的时间范围.

目前SQL返回"12"附近的语法不正确."

sql t-sql sql-server sql-server-2005 sql-server-2008

79
推荐指数
4
解决办法
44万
查看次数

如何获取多个列以用于游标循环?

当我尝试在游标循环中运行以下SQL代码段时,

set @cmd = N'exec sp_rename ' + @test + N',' +
           RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Run Code Online (Sandbox Code Playgroud)

我收到以下消息,

消息15248,级别11,状态1,过程sp_rename,行213
参数@objname不明确或声明@objtype(COLUMN)错误.

有什么问题,我该如何解决?我尝试用括号括起列名[],并""像一些建议的搜索结果一样加双引号.

编辑1 -

这是整个脚本.如何将表名传递给重命名sp?我不知道如何做到这一点,因为列名在许多表之一.

BEGIN TRANSACTION

declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500) 
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'

open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
  set @cmd = N'exec sp_rename ' + @test …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2005

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

MARS(多个活动结果集)的缺点?

有谁知道MARS(多个活动结果集)的任何缺点?有没有人知道为什么人们应该避免使用MARS,比如游标比MARS更有用的情况.

sql-server-2005 sql-server-mars

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

即使使用事务回滚,SQL标识(自动编号)也会增加

我有一个.net事务与SQL插入到SQL Server 2005数据库.该表具有标识主键.

当事务中发生错误时,将Rollback()被调用.行插入正确回滚,但是下次将数据插入表时,标识会增加,就好像回滚从未发生过一样.所以基本上在身份序列中存在差距.有没有办法让Rollback()方法回收丢失的身份?

我没有以正确的方式接近这个吗?

.net sql transactions sql-server-2005 identity-column

76
推荐指数
6
解决办法
3万
查看次数

使用SQL Server选择更新

我使用的是隔离级别的Microsoft SQL Server 2005数据库READ_COMMITTEDREAD_COMMITTED_SNAPSHOT=ON.

现在我想用:

SELECT * FROM <tablename> FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

...以便在尝试访问同一行"FOR UPDATE"时阻止其他数据库连接.

我试过了:

SELECT * FROM <tablename> WITH (updlock) WHERE id=1
Run Code Online (Sandbox Code Playgroud)

...但是即使选择"1"以外的ID,这也会阻止所有其他连接.

SELECT FOR UPDATE对于Oracle,DB2,MySql而言,这是正确的提示吗?

编辑2009-10-03:

这些是创建表和索引的语句:

CREATE TABLE example ( Id BIGINT NOT NULL, TransactionId BIGINT, 
    Terminal BIGINT, Status SMALLINT );
ALTER TABLE example ADD CONSTRAINT index108 PRIMARY KEY ( Id )
CREATE INDEX I108_FkTerminal ON example ( Terminal )
CREATE INDEX I108_Key ON example ( TransactionId )
Run Code Online (Sandbox Code Playgroud)

很多并行进程都这样做SELECT:

SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 read-committed-snapshot

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

T-SQL是否具有连接字符串的聚合函数?

可能重复:
SQL Server 2000中的内嵌类型函数?
连接行值T-SQL

我有一个我正在查询的视图,看起来像这样:

BuildingName    PollNumber
------------    ----------
Foo Centre      12        
Foo Centre      13
Foo Centre      14
Bar Hall        15
Bar Hall        16
Baz School      17
Run Code Online (Sandbox Code Playgroud)

我需要编写一个将BuildingNames组合在一起的查询,并显示一个PollNumbers列表,如下所示:

BuildingName    PollNumbers
------------    -----------
Foo Centre      12, 13, 14
Bar Hall        15, 16
Baz School      17
Run Code Online (Sandbox Code Playgroud)

我怎么能在T-SQL中做到这一点?我宁愿不为此写一个存储过程,因为它看起来有点矫枉过正,但我​​不是一个数据库人.看起来像SUM()或AVG()这样的聚合函数是我需要的,但我不知道T-SQL是否有一个.我正在使用SQL Server 2005.

t-sql sql-server group-by sql-server-2005 aggregate-functions

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