标签: sql-server-2005

SQL Server 2005,针对表的一部分进行外键检查

我有一个articles引用categories表的表。我像这样定义外键:

constraint fk_categoryid foreign key (categoryid) references categories (categoryid)
on update no action
on delete no action
Run Code Online (Sandbox Code Playgroud)

是否可以在外键定义中限制可以基于categories表中另一列引用的类别?例如,假设表中有一个hasarticlescategories。我希望将外键约束限制在hasarticles = true.

sql-server-2005 foreign-key database-design

4
推荐指数
1
解决办法
162
查看次数

SQL Server 2005 根据行内日期限制更新或删除记录

我有两个 SQL Server 之间的事务复制。出于测试目的,我在订阅者处删除了许多仍然存在于发布者处的记录。

我现在知道,如果有人在发布者处更新或删除了我的订阅者上不存在的一些记录,那么我的复制将会崩溃。

我知道我也可以在分发服务器上过滤数据,但这意味着重新初始化我的订阅者,这意味着通过慢速链接传输近 40GB。

因此,当我测试我订阅的数据库时,我希望限制用户只能在发布者端更新或删除记录。我的源表有一个日期字段,我想根据日期限制更新或删除。

为此使用触发器还是约束更好?

如何尽可能避免记录锁定?

replication trigger sql-server-2005 sql-server constraint

4
推荐指数
1
解决办法
1141
查看次数

显示所有表及其列

有没有办法显示所有表格的布局以查看它们的列?我正在尝试查找具有特定列名的表。

我正在使用 Web 应用程序Web Data Administrator

例子:

table1
- column 1
- column 2
table2
- column 1
Run Code Online (Sandbox Code Playgroud)

有没有办法获得这样的显示?

sql-server-2005 sql-server windows

4
推荐指数
1
解决办法
347
查看次数

SQL Server 更新和数据库传输

在我的测试网络中,有一个用 SQL Server 2005 创建的数据库。我必须将 SQL Server 2005 更新为 SQL Server 2008。该数据库应该与 SQL Server 2008 一起使用。所以要移动它。在 SQL Server 更新期间/之后传输数据库的最佳方法是什么?

sql-server-2005 sql-server-2008 upgrade

4
推荐指数
1
解决办法
147
查看次数

选择屏蔽问题

数据库没有响应简单的选择语句,如

select * from table
Run Code Online (Sandbox Code Playgroud)

我注意到sys.dm_os_waiting_tasks一个会话被阻塞,阻塞会话指向一个使用 lock & Tran 的存储过程,如下所示

    BEGIN TRAN

declare @min numeric ,@com numeric

select top 1  @com=companyid from tblcompanies
order by newid()



select @min=min(productid) from tblproducts(UPDLOCK)
where companyid=@com and (lockstatus<>1 or lockstatus is null )


update tblproducts
set lockStatus='1'
where productid>=@min and productid<@min+4

select distinct top 4 s.productname,s.productid,s.companyid,r.Type,r.requestType,r.UserID
from tblcompanydetail rd inner join tblproducts s
on rd.productid=s.productid
inner join tblcompanies r
on r.companyid=s.companyid
where s.productid>=@min and s.productid<@min+4


if @@error >0 rollback tran

commit tran …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

4
推荐指数
1
解决办法
279
查看次数

是否可以将 WITH INIT 用于我的事务日志备份以避免它变得太大?

我仍在努力理解 SQL 的备份作业。

我们目前有一个使用完整恢复模型的 SQL Server 2005 实例。

我们每周进行一次完整的数据库备份。

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase.Bak'
WITH INIT, NAME = N'MyDatabase.Bak'
Run Code Online (Sandbox Code Playgroud)

每天一次差异备份

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Diff.Bak'
WITH INIT, DIFFERENTIAL, NAME = N'MyDatabase_Diff.Bak'
Run Code Online (Sandbox Code Playgroud)

现在我试图弄清楚如何每小时安排事务日志备份,所以我们最多会损失一个小时的工作。

BACKUP LOG [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Log.Bak'
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们的存储空间有限,我不希望日志文件变得太大。我可以使用WITH INIT事务日志备份来强制它每小时创建一个新文件吗?或者我是否需要自上次差异备份以来的所有事务日志备份才能恢复到一天中的特定时间点?

如果我确实需要保留自上次差异以来的所有副本,有没有办法在我进行备份时告诉它重置?

sql-server-2005 backup

4
推荐指数
1
解决办法
8238
查看次数

如何避免外键约束造成死锁?

所以我有两个表会造成死锁。应用程序实际上什么都不做,只是在两个不同的事务中更新两个不同的表。这两个表之间存在外键约束(不是级联,只是为了强制完整性),否则就每个事务的发生方式而言,两者之间没有关系。这可能是僵局的全部根源吗?如果是这样,你如何设计外键约束来避免这个问题?

更新:我应该指出(对于那些遇到这个问题的人)根本问题最终与外键约束无关,但是根据一点,如果另一个外键约束可能导致死锁side 只有主键的聚集索引。

我还了解到死锁 XML 报告没有捕获到那时的整个事务(我错误的假设它确实导致了不正确的问题),这很烦人。

编辑:这两个表是一个名为 KID 的表和一个名为 Image 的表(还有 ZAT_KID 和 ZAT_Image 由触发器填充作为审计跟踪,它们不引用其他任何内容)。Image 的 KIDID 字段是 KIDID 的 KID 主键(聚集索引)的外键。我还应该补充一点,每个堆栈开头的初始选择 1 是数据库池,确保连接在执行其他任何操作之前仍然有效。

这是死锁 XML:

<deadlock-list>
 <deadlock victim="processedb6d8">
  <process-list>
   <process id="processec49b8" taskpriority="0" logused="2672" waitresource="PAGE: 7:1:295182" waittime="2609" ownerId="2771483341" transactionname="implicit_transaction" lasttranstarted="2013-02-05T15:32:48.150" XDES="0x804da410" lockMode="X" schedulerid="2" kpid="10180" status="suspended" spid="93" sbid="0" ecid="0" priority="0" transcount="2" lastbatchstarted="2013-02-05T15:32:56.980" lastbatchcompleted="2013-02-05T15:32:56.963" clientapp="Microsoft JDBC Driver for SQL Server" hostname="newappserver" hostpid="0" loginname="DatabaseUser" isolationlevel="read committed (2)" xactid="2771483341" currentdb="7" lockTimeout="4294967295" clientoption1="539099168" clientoption2="128058">
    <executionStack>
     <frame procname="Database.dbo.T_Audit_KID" line="67" stmtstart="3936" stmtend="5062" sqlhandle="0x030007005776f42cc93b87015aa100000000000000000000">
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 foreign-key deadlock

4
推荐指数
1
解决办法
4103
查看次数

向视图添加索引

我有一个包含 varchar 类型字段中的 XML 数据的表。该字段用于存储来自各种不同 XML 模式的数据,其中一些通过存储在另一个表中的记录相关联。

我最近创建了一些解析 XML 的视图,并且在某些情况下创建了一些值的枢轴。这些视图为我的报告提供了极好的数据,但对性能造成了严重影响。我想知道是否可以通过索引提高性能。

下面是一个视图的例子:

create view StudentHours as
  select
      x.TableRecordId as Id
    , x.RecordXml.value('(/TableRecord/LOGDate)[1]', 'DateTime') as LogDate 
    , x.RecordXml.value('(/TableRecord/LOGHours)[1]', 'float') as Hours
    , x.RecordXml.value('(/TableRecord/LOGApproved)[1]', 'varchar(10)') as Approved
    , y.PKTableRecordId as CourseId
  from
    (select TableRecordId, Cast([Schema] as Xml) as RecordXml 
     from TableRecords where TableSchemaId = 1857) as x
  join TableRecordRelations as y on x.TableRecordId = y.FKTableRecordId
Run Code Online (Sandbox Code Playgroud)

然后,我将在其他执行聚合等操作的视图中使用此视图。

名为 TableRecords 的表在其唯一 id TableRecordId 上有一个索引,TableRecordRelations 在其重要字段上也有索引。

添加一两个索引是否有助于此视图的性能?是否需要更多数据来确定这一点?

sql-server-2005 sql-server view materialized-view

4
推荐指数
1
解决办法
917
查看次数

SQL Server 2005 数据库移动和合理化 - 推荐的维护流程

我们正在将 SQL Server 2005 数据库迁移到新服务器并升级到 2008,我正在寻找一些建议和保证我们的方法是正确的。

我继承了这个数据库,但说实话,我发现它有点混乱 - 最重要的是,我基本上已经学会了在这台服务器上成为一名 SQL Server 开发人员(没有计算方面的教育背景),所以我做了很多我自己的错误。我们作为一个部门(公共部门)资金不足,因​​此缺乏专业知识,只能靠自己的力量自力更生。数据库一开始只是一个后台的东西,但对我们的组织来说已经变得非常重要,因此坦率地说,性能令人尴尬。

所以我们有这样的问题

  • Autoshrink 使用历史
  • 存储空间不足的历史 - 服务器上从来没有足够的空间让数据库增长,所以我猜这些文件可能在内部很碎片化。
  • 有多种归类类型(无缘无故),
  • text到处都是不合适的数据类型(很多Nvarchar, ncharntext当我们不需要 ascii 字符时,text哪里varchar更合适)

新服务器是 64 位虚拟服务器,存储在 RAID 上。

我安装和升级后的计划是:

  • 删除大量我们已经确定(有信心)冗余的表(大约是数据库大小的 1/3!)
  • 将排序规则归一化为 1 种类型(经过一些分析和测试,我们确信这不会给我们带来问题——我们不需要区分大小写)
  • text数据类型规范化为varchar/char
  • 将数据库文件大小设置为未来 2 年的预期使用量加上 50%

在这些流程之后/之前,我还有什么应该考虑的吗?这里的任何决定是否看起来不合时宜?例如文件大小问题 - 这是我在 RAID 上需要担心的事情吗?

sql-server-2005 sql-server-2008 migration

4
推荐指数
1
解决办法
226
查看次数

重新索引及其对 SQL 缓存的影响

目前正在研究重新索引我们的 sql 数据库,但找不到有关过程缓存是否会受到影响的任何信息。任何帮助或信息都会很棒。我们使用 SQL Server 2005 作为我们的 DBMS。

sql-server-2005 cache

4
推荐指数
1
解决办法
1091
查看次数