标签: sql-server-2008

主键会被添加为聚集索引吗?

我继承了一个数据库,其中没有在表上定义主键。也没有分配给表的聚集索引。

如果我执行一个更改表来分配主键,这会导致 SQL Server 也创建聚集索引吗?如果是这样,由于数据在硬盘上重新定位,我应该期望数据库速度变慢吗?

index sql-server-2008 database-design sql-server

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

位数据类型映射到 Java 域对象中的什么

当您有一列bit数据类型时,在 Java POJO 将该表映射到使用javax.persistence注释的对象时,将使用什么 Class 来表示该列?

我试过了Boolean,没有用,并产生了以下错误:

org.hibernate.exception.SQLGrammarException: 无法插入: [com.DomainClassName]
java.sql.SQLException: '-' 附近的语法不正确。

编辑:Java 布尔值确实映射到 SQL Server 中的位数据类型。我有一个列名,里面有一个破折号,我必须更改。

sql-server-2008 java

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

检查行是否存在

我需要编写一个只插入一行的查询,即使该查询运行多次。作为 SQL 的新手(以及新的),我做了一个,if not exists(...)但一个朋友说他更喜欢删除该行,如果它存在,然后再次添加它。

  • 删除EXISTS或反之亦然可能有什么好处?
  • 还有另一种方法吗?

sql-server-2008 sql-server insert if-not-exists

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

TSQL DateTime DataType - 小数秒与毫秒

想要从一天中获取所有记录。所以2013-03-05 00:00:00.000和之间的一切2013-03-05 23:59:59.999。我们在后端与发生在2013-03-06 00:00:00.000.

因此,在测试中,我在 SSMS 中运行:

select cast('2013-03-05 23:59:59.999' as datetime)
select cast('2013-03-05 23:59:59.996' as datetime)
select cast('2013-03-05 23:59:59.994' as datetime)
Run Code Online (Sandbox Code Playgroud)

并得到:

2013-03-06 00:00:00.000
2013-03-05 23:59:59.997
2013-03-05 23:59:59.993
Run Code Online (Sandbox Code Playgroud)

毫秒部分会稍微回落。在第一行的情况下,它真的很重要。因为我不想要 2013-03-06 00:00:00.000 - 我想要午夜前一毫秒。

TSQL 在文档中声明它使用小数秒,而不是使用毫秒的 .Net 日期时间。这似乎只是语法上的差异,但如果您真的关心 TSQL 中的毫秒精度,您是否会被迫全面使用DateTime2。从datetime2to 转换datetime仍然会在几毫秒内把事情搞砸。

在 c# 中DateTime.Parse("03/5/2013 23:59:59.999").Millisecond仍然返回 999。

我这样解释好吗?如果我关心毫秒精度,我datetime2只坚持使用。

通常,这将是一个简单的修复,但在这种情况下,我们使用的是datetime作为参数接收的 Microsoft 系统函数。

sql-server-2008 sql-server datetime

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

如果将列从 varbinary(8000) 更改为 varbinary(max) 会丢失数据吗?

如果更改表以将现有列从 varbinary(8000) 更改为 varbinary(MAX),是否会丢失任何数据?

sql-server-2008 sql-server-2008-r2

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

两个不同的创建索引命令之间的差异

这两个脚本之间有区别吗?或者,第一个脚本的所有额外标记/属性(即:NONCLUSTEREDWITH...等...)是否都是 SQL Server 2008 中第二个脚本的默认值?

1脚本:

CREATE UNIQUE NONCLUSTERED INDEX [DEID_MAP_IDX1] ON [dbo].[DEID_MAP]
(
    [VISIT_NUM] ASC
) WITH 
  (PAD_INDEX  = OFF, 
   STATISTICS_NORECOMPUTE  = OFF, 
   IGNORE_DUP_KEY  = OFF, 
   ALLOW_ROW_LOCKS = ON, 
   ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

2脚本:

CREATE UNIQUE INDEX [DEID_MAP_IDX1] ON [DEID_MAP] 
(
    [VISIT_NUM] ASC
);
Run Code Online (Sandbox Code Playgroud)

仅供参考:在执行批量数据加载之前,有 ETL 代码使用此脚本删除索引,然后最后使用上面的第二个脚本重新创建索引。

DROP INDEX [deid_map_idx1] ON [deid_map] WITH ( ONLINE = OFF );
Run Code Online (Sandbox Code Playgroud)

编辑:

应用上面的简单索引(第二个脚本)后,我得到了这个:

SQL Server Management Studio > 扩展表 …

index sql-server-2008 sql-server

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

SQL Server 磁盘写入队列有时会急剧增长

我有 SQL Server 2008 和一个具有完整恢复模型的数据库。通常,队列长度小于 1。但有时它会在几秒钟内增长到数千(3000 !!)。此时,许多写入查询以超时错误告终。

使用资源监视器,我发现此时 sqlserver.exe 将大量数据写入主数据库文件(MDF)。虽然它通常写入事务日志(LDF)。

使用 SQL Server Profiler,我发现当时没有运行大量查询。

我认为,这是某种SQL服务器的后台操作,但我想知道是哪种?

数据库还启用了 READ_COMMITED_SNAPSHOT 和镜像(同步模式)。这个事实可能是我问题的原因吗?

更新:我发现写入日志(而不是数据文件)是完全恢复模式的默认行为。并且日志只能通过备份事务日志操作复制到数据文件中。还是不明白为什么SQL server每十分钟复制一次日志...

performance sql-server-2008 sql-server

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

SSIS 2012 是否可以与 SQL Server 2008R2(未集成)一起使用

我们公司有SQL Server 2008R2,并计划在2013年底或2014年初升级到2012。我想现在使用SSIS 2012,因为我们有软件。

我们有一个公司政策,我们不能在数据库服务器本身上运行 SSIS 包。我们从另一个应用程序服务器运行它们,而不是集成服务。

我的问题是,如果我要在我们的应用服务器上为 SSIS 安装所有 2012 组件,会不会有任何潜在问题?我还没有使用过 SSIS 2012,所以我不知道用于指向我们的 SQL 2008 实例的 OLE DB 组件 Id 是否会成为一个问题。

sql-server-2008 ssis sql-server-2012

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

在表之间移动 100 万行的性能问题

我想从重复1万行table1table2。我用这样的查询写了一份工作:

delete from table1 OUTPUT *.delete into table2
Run Code Online (Sandbox Code Playgroud)

我每小时都在执行这项工作,但需要很长时间。

另一个问题是我的日志文件大小不断增加。我怎样才能解决这个问题?

sql-server-2008 sql-server partitioning

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

将 SQL Server 2012 数据库还原到 2008

按照以下所列说明将兼容性级别设置为 SQL Server 2008 后,我尝试恢复 SQL Server 2012 数据库:http : //learnsqlwithbru.com/2012/01/11/setting-database-compatibility-level- for-sql-server-2012/

但是,恢复仍然不起作用,我得到“指定的强制转换无效”。有什么办法可以解决这个问题吗?

注意:我不想使用生成脚本选项。

sql-server-2008 sql-server-2012

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