标签: sql-server

进程成为僵局受害者的原因

我有一个选择的过程需要很长时间才能完成,大约需要5到10分钟.
我目前没有使用NOLOCK作为MS SQL数据库引擎的提示.
与此同时,我们有另一个进程在进行更新并插入到同一个数据库和相同的表中.
第一个过程已经开始,最近过早地结束了一条消息

SQLEXCEPTION:事务在锁资源上与另一个进程死锁,并被选为死锁牺牲品.

第一个进程在相同条件但在数据库较小的其他站点上运行,因此所讨论的select语句需要更短的时间(大约30秒左右).在这些其他站点中,我没有在这些其他站点中获得死锁消息.我也没有在最初遇到问题的网站上收到此消息,但是,我认为,随着数据库的增长,我相信我必须超过一些门槛.这是我的问题:

  1. 执行事务所花费的时间是否会使关联进程更有可能被标记为死锁牺牲品.
  2. 如果我用NOLOCK提示执行select,这会解决问题吗?
  3. 我怀疑在select语句中作为WHERE子句的一部分检查的datetime字段导致慢查找时间.我可以根据此字段创建索引吗?这是可取的吗?

sql-server deadlock

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

执行Insert命令并在Sql中返回插入的Id

嗨我在MVC4中使用C#将一些值插入到sql表中.实际上我想插入值并返回最后插入记录的"ID".我使用以下代码.

public class MemberBasicData
{
    public int Id { get; set; }
    public string Mem_NA { get; set; }
    public string Mem_Occ { get; set; }     
}
Run Code Online (Sandbox Code Playgroud)

插入时,ID在数据库中自动递增.

public int CreateNewMember(string Mem_NA, string Mem_Occ )
{
    using (SqlConnection con=new SqlConnection(Config.ConnectionString))
    {
        using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con))
        {
            cmd.Parameters.AddWithValue("@na", Mem_NA);
            cmd.Parameters.AddWithValue("@occ", Mem_Occ);
            con.Open();

            int modified = cmd.ExecuteNonQuery();

            if (con.State == System.Data.ConnectionState.Open) con.Close();
                return modified;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道ExecuteNonQuery表示影响行的数字.而不是我使用

int modified = (int)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

但不行.请帮我解决这个问题.是否有任何代码,如cmd.ExecuteInsertAndGetID()(不使用我的代码).

c# sql sql-server asp.net-mvc-4

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

从SQL语句中的字段中删除前导零

我正在研究从SQLServer数据库读取以生成提取文件的SQL查询.从特定字段中删除前导零的要求之一,这是一个简单的VARCHAR(10)字段.因此,例如,如果字段包含'00001A',则SELECT语句需要将数据返回为'1A'.

SQL中有没有办法以这种方式轻松删除前导零?我知道有一个RTRIM功能,但这似乎只是删除空格.

sql t-sql sql-server

93
推荐指数
5
解决办法
21万
查看次数

我如何在SQL Server mgmt studio中使用DATETIME进行插入

我有一个网站插入到下表中.我需要做一些手动插入,但我不确定如何在C#中传递相当于DateTime.Now.

我在SQL server mgmt studio中的查询编辑器中运行以下操作.有没有办法在下面的查询中传递当前日期时间.

INSERT INTO [Business]
           ([IsDeleted]
           ,[FirstName]
           ,[LastName]
           ,[LastUpdated]
           ,[LastUpdatedBy])
     VALUES
           (0, 'Joe', 'Thomas', 
           ,<LastUpdated, datetime,>
           ,<LastUpdatedBy, nvarchar(50),>)
Run Code Online (Sandbox Code Playgroud)

sql-server datetime

93
推荐指数
2
解决办法
34万
查看次数

程序员应该使用SSIS,如果是,为什么?

作为.NET开发人员,出于什么原因,我应该更喜欢SSIS包而不是编写代码?我们有一吨的生产包在我目前的工作,而且他们的噩梦到两个"写"(也许是画?)和维护.每个包看起来像一碗多彩的意大利面,C#和VB.NET脚本混合在抽象分解的点.要弄清楚每个"执行SQL任务"或"Foreach循环"的作用,我必须双击该死的东西并浏览分散在多个选项卡中的文字值和表达式树.

我很开放,所以我想知道是否有其他优秀的开发人员发现SSIS比编写代码更有效率.如果您确实发现SSIS更高效,请告诉我原因.

.net c# sql-server ssis

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

在SQL Server中,何时应该使用GO以及何时应该使用分号;?

我总是对在命令后应该使用GO关键字以及命令末尾是否需要分号时感到困惑.有什么区别以及为什么/何时应该使用它们?

当我在SQL Server Management Studio中运行Generate-script时,它似乎在整个地方使用GO,但不是分号.

sql sql-server

93
推荐指数
5
解决办法
6万
查看次数

替换为text或ntext数据类型的REPLACE

我需要更新/替换datatable.column中的数据.该表有一个名为的字段Content.我正在使用该REPLACE功能.由于列数据类型是NTEXT,SQL Server不允许我使用该REPLACE函数.

我无法更改数据类型,因为此数据库是第三方软件表.更改数据类型将导致应用程序失败.

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息8116,级别16,状态1,行1参数数据类型ntext对替换函数的参数1无效.

  • 我可以用T-SQL解决这个问题吗?有人有一个如何阅读和循环的例子吗?
  • 由于这是一次性转换,也许我可以改为另一种类型,但我担心我搞乱了数据.

有一个主键字段:name:ID - integer - 它是一个标识....所以我也需要考虑这个问题.也许将身份设置为N临时.

请告知如何实现REPLACE功能?

约.需要使用新解决方案更新3000个语句.

sql t-sql sql-server

93
推荐指数
2
解决办法
13万
查看次数

删除临时表(如果存在)

我在SQL中有两行代码,可以动态创建两个表,我需要做类似的事情

IF TABLE EXISTS 
    DROP IT AND CREATE IT AGAIN
ELSE
    CREATE IT
Run Code Online (Sandbox Code Playgroud)

我的行是以下几行

CREATE TABLE ##CLIENTS_KEYWORD(client_id int)     
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)   
Run Code Online (Sandbox Code Playgroud)

如何在我的程序中对这两个表应用这个概念?

sql sql-server

93
推荐指数
2
解决办法
40万
查看次数

仅在修改列时才触发SQL更新

通过查看其他示例,我提出了以下内容,但它似乎没有按照我的意愿工作:我希望它只更新已修改的信息,如果QtyToRepair值已更新...但它不会那.

如果我注释掉了哪里,则在每种情况下都会更新修改后的信息.正如我所说的其他例子让我变得乐观.任何线索都表示赞赏.谢谢.

沃尔特

ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
   ON [dbo].[SCHEDULE]
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE SCHEDULE SET modified = GETDATE()
        , ModifiedUser = SUSER_NAME()
        , ModifiedHost = HOST_NAME()
    FROM SCHEDULE S
    INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
    WHERE S.QtyToRepair <> I.QtyToRepair
END
Run Code Online (Sandbox Code Playgroud)

sql sql-server triggers

93
推荐指数
4
解决办法
30万
查看次数

错误 - 无法获取独占访问权限,因为数据库正在使用中

我实际上是在尝试创建一个脚本(在Sql Server 2008中)从一个备份文件中恢复一个数据库.我做了以下代码,我收到一个错误 -

Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because 
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

IF DB_ID('AdventureWorksDW') IS NOT NULL 
BEGIN 
RESTORE DATABASE [AdventureWorksDW] 
FILE = N'AdventureWorksDW_Data' 
FROM  
DISK = N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak' 
WITH  FILE = 1, 
MOVE N'AdventureWorksDW_Data' 
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf', 
MOVE N'AdventureWorksDW_Log'  
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF', 
NOUNLOAD,  STATS …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

93
推荐指数
7
解决办法
18万
查看次数