标签: sql-server-2008

提高事实表的性能

我有一个事实表 CardTransactionFact

表结构

TABLE [dbo].[CardTransactionFact]
    [CardTransactionID] [int] IDENTITY(1,1) NOT NULL,
    [TransactionTerminalID] [int] NOT NULL,
    [SourceAccountTypeID] [int] NULL,
    [DestinationAccountTypeID] [int] NULL,
    [RimNo] [varchar](15) NULL,
    [CaptureCodeID] [int] NOT NULL,
    [RoutingCodeID] [int] NOT NULL,
    [ProcessingCodeID] [int] NOT NULL,
    [ActionCodeID] [int] NOT NULL,
    [NetworkCodeID] [int] NOT NULL,
    [ProductCodeID] [int] NOT NULL,
    [AcquiringCountryCodeID] [int] NOT NULL,
    [IssuingCountryCodeID] [int] NOT NULL,
    [TransactionCurrencyCodeID] [int] NOT NULL,
    [AmountBD] [decimal](18, 3) NOT NULL,
    [LocalCurrencyCodeID] [int] NOT NULL,
    [CardIssuerBank] [int] NOT NULL,
    [CardTypeID] [int] NOT NULL,
    [SuspectTransactionFlag] [char](1) NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server-2008 facttable query-performance

2
推荐指数
1
解决办法
2261
查看次数

SSRS 中的日期格式

我想知道 SSRS 中是否有设置来指示日期格式。我们需要在报告上以 dd/mm/yyyy 格式显示日期,并且从我在数据库中看到的值以这种方式存储。但是,当我将数据集中的数据字段(由存储过程呈现)放入时,SSRS 将日期更改为 mm/dd/yyyy 格式!

例如,我在表格中的联系日期为 :1972-02-20 00:00:00.000 并希望在报告中显示为 1972/02/20,但 SSRS 将其显示为 2/20/1972。

知道为什么以及如何解决它吗?

谢谢你。

干杯,纳西拉

sql-server-2008 ssrs date-format

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

在不同的文件组上创建数据库

在不同文件组上为操作系统创建数据库的优缺点是什么?我知道如果您想让数据库的静态部分在其他部分(位于不同的文件组)可以恢复时保持在线状态,这很有用。然而,这种情况对我们没有用(根据系统的性质)。

根据您的经验,如果在不同的文件组上创建数据库,我们还能获得其他好处吗?如果是这样,分配文件组的最佳做法是什么?

非常感谢。

sql-server-2008 sql-server storage filegroups

2
推荐指数
1
解决办法
665
查看次数

您将如何为预订系统设计一张桌子?

我有一个预订系统的设计数据库。预订系统要求如下:

  1. 预订系统允许用户预订周一至周五上午 8 点至下午 1 点之间的时间段(1 小时)。
  2. 用户可以为该 1 小时时段预订场地。
  3. 预订系统每年开放13周,然后休息13周,再开放13周,休息13周。

我在设计表格时面临的问题是有 3 个重要的控制变量 - 时间段、场地和 13 周。

我通过有一个包含固定行数的表格来起草设计。(因此,对于上午 8 点到下午 1 点,将有 5 个插槽,因此每周将有 25 个插槽。假设有 3 个场地,那么我将有 25 个插槽 x 3 个场地,这给了我 75 行。然后我乘以 75 至 26 周,因为系统将打开两个 13 周。因此,这将给我 1950 个固定行。

但是,问题是如果我通过在晚上 10 点结束来增加小时数,那么我每天将有 14 个时段,这意味着每周将有 70 个时段。如果场地增加到 10 个场地,那么,我将有 70 个插槽 x 10 个场地,这给我 700 排。当然,乘以 26 周,我将需要一个包含 18,200 个固定行的表。由于行太多,设计将难以管理。

该表将类似于以下内容:

+------------------------------------------------- ---------------------+
| 身份证 | 周 | 时间 | 地点 | 用户 | 状态 | …

sql-server-2008 database-design

2
推荐指数
1
解决办法
7529
查看次数

回滚生成脚本

在应用程序的开发过程中,用户通常想要添加新模块、业务规则等。所以我经常使用 SQL Server 2008 选项从开发数据库创建脚本以生成新表,然后我将在发布之前在生产服务器上执行应用程序的新版本。

所以我想知道有没有办法将整个生成脚本文件放在事务中,如果在将所有内容返回到以前的状态时出现错误,没有添加新表,插入数据等时回滚更改。

如果有原因这不是推荐的方法,请解释。

sql-server-2008 scripting transaction rollback

2
推荐指数
1
解决办法
2070
查看次数

事务日志文件 .ldf 太小

当前数据库将近 200GB,但是事务日志文件只有 4.1GB。我担心这是否会影响数据库的性能以及如何解决。

当我做这个查询时

DECLARE @DatabaseName VARCHAR(50) ;
  SET @DatabaseName = 'dbname'
  SELECT name ,
    recovery_model_desc ,
    log_reuse_wait_desc
  FROM  sys.databases
  WHERE name = @DatabaseName

Show Recovery Model = Simple, Log Reuse Wait = Nothing. 
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么日志文件这么小,这会影响性能吗?

sql-server-2008 sql-server transaction-log

2
推荐指数
1
解决办法
674
查看次数

我将如何重置表的所有标识值,并在 Sql Server 2008 中重新设置自动编号

我有一个客户在数据库中有一个带有自动编号 ID 字段的表。客户使用该 ID 作为存储在数据库中的唯一记录的用户友好标识符。一段时间后,我的应用程序将删除数据库中的旧记录,这样在任何给定时间通常会有大约 30k 条记录的滑动窗口。

这个功能很好,已经工作了几年,但现在数据库中的id已经上亿了,客户现在很难将故障id传达给外界。

他们想要做的,以及我希望找出如何做的,是将当前表中的所有记录,并将它们的 id 减少到从 1 开始,然后重新设定身份以开始计算新表的位置id 会。

在数学中:新 id = 当前 id - min(ID)

然后最后:新种子 = max(id)

谢谢

编辑

为了帮助澄清一件事,记录会定期从数据库中删除,因此开始:

1-30k 有效记录

5个月后:

1-2mil - 无记录 2mil - 2mil + 30k - 有效记录

用户本质上想要做的是从所有 id(仍然是唯一的)中减去 2mil,并假装以前的记录根本不存在。

sql-server-2008 sql-server identity ddl

2
推荐指数
1
解决办法
589
查看次数

只应为任何逻辑文件名指定一个 WITH MOVE 子句

我正在尝试通过编写备份和还原脚本来复制数据库。我的备份程序工作正常,但我不断收到错误消息

已为文件指定了冲突的文件重定位。只应为任何逻辑文件名指定一个 WITH MOVE 子句。

当我运行该程序进行还原时。

这是程序代码。谁能发现我的错误是什么?

ALTER PROCEDURE spDBRestore (@BackupName NVARCHAR(50), @RestoreName NVARCHAR(50))
AS 
BEGIN
DECLARE @BackupPath NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\TemplateCopy\'+@BackupName+'.BAK',
@NewDBFileName NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'+@RestoreName+'.mdf',
@NewLFFileName NVARCHAR(4000) = 'L:\MSSQL10_50.MSSQLSERVER\MSSQL\Data\'+@RestoreName+'_1.ldf'
select @BackupName, @RestoreName, @NewDBFileName, @newlffilename
RESTORE DATABASE @RestoreName
FROM DISK = @BackupPath
WITH FILE = 1,
MOVE @BackupName TO @NewDBFileName,
MOVE @BackupName TO @NewLFFileName,
NOUNLOAD,
REPLACE;

END
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server backup stored-procedures

2
推荐指数
1
解决办法
2852
查看次数

数据库快照的优势

有人可以强调SQL2008中数据库快照的优点。

我读了一些

“创建数据库快照时,SQL Server 不会分配与源数据库中数据文件当前大小相等的磁盘空间。相反,SQL Server 利用称为稀疏文件的操作系统功能。稀疏文件是本质上是文件分配表中的一个条目,几乎不占用磁盘空间。”

有人也可以告诉我如何在没有分配空间的情况下创建文件。

谢谢

sql-server-2008 sql-server

2
推荐指数
1
解决办法
1206
查看次数

如何为月和年列创建唯一索引?

有谁知道如何为月和年列创建唯一索引?

如:JAN 2012 应该是一个唯一索引,并且还有助于按月和年搜索和检索结果。

谢谢

sql-server-2008

2
推荐指数
1
解决办法
2395
查看次数