标签: sql-server

在 SQL Server 中处理对密钥表的并发访问而不会出现死锁

我有一个旧应用程序用作替代IDENTITY各种其他表中的字段的表。

表中的每一行都存储了 中LastID命名的字段的最后使用的 ID IDName

有时,存储过程会出现死锁——我相信我已经构建了一个合适的错误处理程序;但是我很想知道这种方法是否像我认为的那样有效,或者我是否在这里吠错了树。

我相当肯定应该有一种方法可以访问这个表,而不会出现任何死锁。

数据库本身配置了READ_COMMITTED_SNAPSHOT = 1.

首先,这是表:

CREATE TABLE [dbo].[tblIDs](
    [IDListID] [int] NOT NULL 
        CONSTRAINT PK_tblIDs 
        PRIMARY KEY CLUSTERED 
        IDENTITY(1,1) ,
    [IDName] [nvarchar](255) NULL,
    [LastID] [int] NULL,
);
Run Code Online (Sandbox Code Playgroud)

以及该IDName字段上的非聚集索引:

CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] 
ON [dbo].[tblIDs]
(
    [IDName] ASC
) 
WITH (
    PAD_INDEX = OFF
    , STATISTICS_NORECOMPUTE = OFF
    , SORT_IN_TEMPDB = OFF
    , DROP_EXISTING = OFF
    , ONLINE = OFF
    , ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock

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

设备上的媒体系列格式不正确。SQL Server 无法处理此媒体系列

我正在尝试在 SQL 服务器中恢复 .BAK,但出现以下错误:

消息 3241,级别 16,状态 7,第 1 行 设备“c:\glyn\JA.bak”上的媒体系列格式不正确。SQL Server 无法处理此媒体系列。消息 3013,级别 16,状态 1,第 1 行 RESTORE DATABASE 异常终止。

我尝试使用 2012、2008 甚至 2005 进行恢复,但没有任何效果,我使用了以下查询,Tasks >> Back up但没有任何效果,这是我的 SQL:

RESTORE DATABASE JA FROM DISK='c:\glyn\JA.bak'
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?我已经读到 bak 可能已损坏,它是由另一位从事该项目的 DVD 开发人员发送给我的。

sql-server backup restore

33
推荐指数
4
解决办法
22万
查看次数

EF Code First 对所有字符串使用 nvarchar(max)。这会损害查询性能吗?

我有一些使用 Entity Framework Code First 创建的数据库;应用程序正在运行,总的来说,我对 Code First 让我做的事情感到非常满意。我首先是一名程序员,其次是 DBA,这是必要的。我正在阅读 DataAttributes 以在 C# 中进一步描述我希望数据库执行的操作;我的问题是:将这些nvarchar(max)字符串放在我的桌子上会吃什么惩罚(见下面的例子)?

在这个特定的表中有几列;在 C# 中,它们是这样定义的:

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Message { get; set; }
    public string Source { get; set; }
    public DateTime Generated { get; set; }
    public DateTime Written { get; set; }
Run Code Online (Sandbox Code Playgroud)

我希望根据名称、来源、生成和书面内容进行查询和/或排序。我希望 Name 和 Source 的长度为 0-50 个字符,有时可达 150 个。我希望这个表开始时很小(<100k 行),但随着时间的推移显着增长(>1m 行)。显然消息可以是小或大的,并且可能不会被查询。

我想知道的是,我的 Name 和 Source …

sql-server entity-framework sql-server-2008-r2 azure-sql-database

33
推荐指数
4
解决办法
7万
查看次数

为什么在 SQL Server 2012 中查询结果集为空会出错?

在 MS SQL Server 2012 中运行以下查询时,第二个查询失败,但第一个查询失败。此外,在没有 where 子句的情况下运行时,两个查询都将失败。我不知道为什么两者都会失败,因为两者都应该有空的结果集。任何帮助/见解表示赞赏。

create table #temp
(id     int primary key)

create table #temp2
(id     int)

select 1/0
from #temp
where id = 1

select 1/0
from #temp2
where id = 1
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

33
推荐指数
2
解决办法
7031
查看次数

如何确定我在 SQL Server 数据库中的表的大小

是否有任何内置函数/存储过程/查询有助于检索有关MyTableSQL Server 数据库中大小的信息?

sql-server table

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

如何从所有表中删除所有约束?

我想从 SQL Server 数据库中的所有表中删除所有默认约束、检查约束、唯一约束、主键和外键。我知道如何从 中获取所有约束名称sys.objects,但是如何填充ALTER TABLE部件?

sql-server constraint ddl

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

执行计划中缺少统计信息的警告

我有一个我无法理解的情况。我的 SQL Server 执行计划告诉我,我缺少表上的统计信息,但统计信息已经创建:

警告

但是如果我们查看表格,我们会看到有一个自动创建的统计信息:

在此处输入图片说明

有人可以帮助理解它是怎么回事吗?

Auto_Update 和 Auto_Create 统计信息在当前数据库上打开。

我正在使用 SQL Server 2014。

sql-server statistics sql-server-2014

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

无法作为数据库主体执行,因为主体“dbo”不存在

我将数据库的备份从 SQL Server 2008 R2 恢复到 SQL Server 2012。

当我尝试访问应用程序的特定页面时,出现此错误:

无法作为数据库主体执行,因为主体“dbo”不存在

它与我的 2008 R2 项目完美配合。我该如何解决这个问题?

sql-server sql-server-2008-r2

33
推荐指数
1
解决办法
6万
查看次数

与 varchar(255) 相比,使用 varchar(5000) 会不会很糟糕?

由于varchar无论如何动态分配空间,我的问题是varchar(255)与使用varchar(5000). 如果是,为什么?

sql-server

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

DBA 新工作的第一天 - 检查备份和安全性 - 如何?还应该检查什么?

通常,当我在新环境中开始时,我倾向于检查备份在哪里,最后一次完整的时间,最后一次应用的还原时间,我也会检查安全性。

我这样做的方式是通过 T-SQL。

检查备份

        ;with Radhe as (
            SELECT  @@Servername as [Server_Name],
            B.name as Database_Name, 
            ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup,
            ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate
            ,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2))
            ,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2))
            ,media_set_id = MAX(A.media_set_id)
            ,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
            ,[Longest Backup Duration]= MAX(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int))
            ,A.type
            FROM sys.databases B 

            LEFT OUTER JOIN msdb.dbo.backupset A 
                         ON A.database_name = B.name 
                        AND A.is_copy_only = 0
                        AND (A.type = 'D')  --'D' full, 'L' …
Run Code Online (Sandbox Code Playgroud)

security sql-server backup restore sql-server-2014

33
推荐指数
1
解决办法
5793
查看次数