标签: sql-server

表扫描和聚簇索引扫描之间有什么区别?

由于a Table Scan和a Clustered Index Scan本质上都扫描了表中的所有记录,为什么Clustered Index Scan应该更好?

举个例子 - 当有很多记录时,下列内容之间的性能差异是什么?:

declare @temp table(
    SomeColumn varchar(50)
)

insert into @temp
select 'SomeVal'

select * from @temp

-----------------------------

declare @temp table(
    RowID int not null identity(1,1) primary key,
    SomeColumn varchar(50)
)

insert into @temp
select 'SomeVal'

select * from @temp
Run Code Online (Sandbox Code Playgroud)

sql sql-server indexing

69
推荐指数
2
解决办法
4万
查看次数

如何解决SQL Server错误1222即解锁SQL Server表

我在数据库中工作,我通过数据加载器在原始表中加载数据.但今天数据加载器因未知原因而陷入困境.然后我从Windows任务管理器停止了数据加载器.但后来我再次尝试在原始表中加载数据,但发现它已锁定,我无法对其进行任何操作.我尝试重新启动SQL Server服务,但它没有解决.我没有权限杀死此服务器上的进程.

下面是SQL Server显示的消息.

执行Transact-SQL语句或批处理时发生异常.(Microsoft.SqlServer.ConnectionInfo)

课程地点:

在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(字符串的SqlCommand,ExecutionTypes executionType)
在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands,ExecutionTypes executionType)
在Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery (StringCollection查询)
在Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery(StringCollection查询,布尔includeDbContext)
在Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImplWorker(字符串newName)将
在Microsoft.SqlServer.Management.Smo.NamedSmoObject. RenameImpl(String newName)

===================================

超出锁定请求超时时间.参数@objname是不明确的,或者声明的@objtype(OBJECT)是错误的.(.Net SqlClient数据提供程序)


服务器名称:162.44.25.59错误号码:1222
严重性:16状态:56
过程:sp_rename行号:282

我的SQL Server版本是2008 R2.

database sql-server deadlock locking sql-server-2008-r2

69
推荐指数
2
解决办法
21万
查看次数

在SQL中的同一行上打印整数变量和字符串

好的,所以我在Technet上搜索了这个答案,但没有用.

我只想打印一个与两个String变量连接的整数变量.

这是我的代码,不运行:

print 'There are ' + @Number + ' alias combinations did not match a record'
Run Code Online (Sandbox Code Playgroud)

它似乎是这样一个基本功能,我无法想象它在T-SQL中是不可能的.但如果不可能,请说出来.我似乎无法找到一个直接的答案.

sql t-sql sql-server

69
推荐指数
3
解决办法
12万
查看次数

源代码管理中的存储过程/数据库架构

你们在你选择的源代码管理系统中跟踪存储过程和数据库架构吗?

当您进行更改(添加表,更新存储过程,如何将更改导入源代码管理?

我们在工作中使用SQL Server,并且我已经开始使用darc进行版本控制,但我对一般策略以及任何方便的工具都很好奇.

编辑:哇,谢谢所有伟大的建议,伙计们!我希望我能选择多个"已接受的答案"!

database sql-server version-control

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

如何比较可能都为空的值是T-SQL

我想确保我没有在表格中插入重复的行(例如,只有主键不同).我的所有字段都允许NULLS,因为我已经确定null表示"所有值".由于null,我的存储过程中的以下语句不起作用:

IF EXISTS(SELECT * FROM MY_TABLE WHERE 
    MY_FIELD1 = @IN_MY_FIELD1  AND
    MY_FIELD2 = @IN_MY_FIELD2  AND
    MY_FIELD3 = @IN_MY_FIELD3  AND 
    MY_FIELD4 = @IN_MY_FIELD4  AND
    MY_FIELD5 = @IN_MY_FIELD5  AND
    MY_FIELD6 = @IN_MY_FIELD6)
    BEGIN
        goto on_duplicate
    END
Run Code Online (Sandbox Code Playgroud)

因为NULL = NULL不是真的.

如何在没有每列的IF IS NULL语句的情况下检查重复项?

sql t-sql sql-server stored-procedures

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

获取SQL Server上个月的记录

我想根据我的db table [member]字段"date_created"获取上个月的记录.

sql是做什么的?

澄清,上个月 - 2009年1月8日至2009年8月31日

如果今天是2010年3月1日,我需要获取2009年1月12日至2009年12月31日的记录.

sql t-sql sql-server

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

我可以用逗号将多行划分为一列吗?

我试图在我的SQL Server数据库中合并这样的东西:

[TicketID], [Person]
 T0001       Alice
 T0001       Bob
 T0002       Catherine
 T0002       Doug
 T0003       Elaine

进入:

[TicketID], [People]
 T0001       Alice, Bob
 T0002       Catherine, Doug
 T0003       Elaine

我需要在SQL Server和Oracle中执行此操作.

我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.

编辑:测试台:

DECLARE @Tickets TABLE (
    [TicketID] char(5) NOT NULL,
    [Person] nvarchar(15) NOT NULL
)

INSERT INTO @Tickets VALUES
    ('T0001', 'Alice'),
    ('T0001', 'Bob'),
    ('T0002', 'Catherine'),
    ('T0002', 'Doug'),
    ('T0003', 'Elaine')

SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud)

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

68
推荐指数
5
解决办法
9万
查看次数

只有在它不存在的情况下才插入一行

我总是使用类似下面的东西来实现它:

INSERT INTO TheTable
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WHERE
        PrimaryKey = @primaryKey)
Run Code Online (Sandbox Code Playgroud)

...但是一旦加载,就会发生主键违规.这是唯一插入此表的语句.那么这是否意味着上述陈述不是原子的?

问题是,这几乎不可能随意重建.

也许我可以将其更改为以下内容:

INSERT INTO TheTable
WITH
    (HOLDLOCK,
    UPDLOCK,
    ROWLOCK)
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WITH
        (HOLDLOCK,
        UPDLOCK,
        ROWLOCK)
    WHERE
        PrimaryKey = @primaryKey)
Run Code Online (Sandbox Code Playgroud)

虽然,也许我使用错误的锁或使用过多的锁定或其他东西.

我在stackoverflow.com上看到了其他问题,其中答案是建议"IF(SELECT COUNT(*)... INSERT"等),但我总是在(可能是不正确的)假设单个SQL语句是原子的.

有没有人有任何想法?

sql t-sql sql-server concurrency locking

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

使用当前日期作为列的默认值

有没有办法DateTime.Now在Sql Server中设置列的默认值?

例:

table Event
Id int (auto-increment) not null
Description nvarchar(50) not null
Date datetime not null
Run Code Online (Sandbox Code Playgroud)

这条线:

Insert into Event(Description) values('teste');
Run Code Online (Sandbox Code Playgroud)

应该插入一行,Date值应该是当前日期.

sql sql-server

68
推荐指数
4
解决办法
18万
查看次数

DateTime的表示以毫秒为单位?

我有一个SQL服务器时间戳,我需要将其转换为自1970年以来以毫秒为单位的时间表示.我可以使用纯SQL执行此操作吗?如果没有,我将它提取到DateTimeC#中的变量中.是否有可能获得毫米级的代表?

谢谢,
Teja.

c# sql-server datetime

68
推荐指数
3
解决办法
10万
查看次数