我继承了一个数据库,其中没有在表上定义主键。也没有分配给表的聚集索引。
如果我执行一个更改表来分配主键,这会导致 SQL Server 也创建聚集索引吗?如果是这样,由于数据在硬盘上重新定位,我应该期望数据库速度变慢吗?
当您有一列bit数据类型时,在 Java POJO 将该表映射到使用javax.persistence注释的对象时,将使用什么 Class 来表示该列?
我试过了Boolean,没有用,并产生了以下错误:
org.hibernate.exception.SQLGrammarException: 无法插入: [com.DomainClassName]
java.sql.SQLException: '-' 附近的语法不正确。
编辑:Java 布尔值确实映射到 SQL Server 中的位数据类型。我有一个列名,里面有一个破折号,我必须更改。
我需要编写一个只插入一行的查询,即使该查询运行多次。作为 SQL 的新手(以及新的),我做了一个,if not exists(...)但一个朋友说他更喜欢删除该行,如果它存在,然后再次添加它。
EXISTS或反之亦然可能有什么好处?想要从一天中获取所有记录。所以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 系统函数。
如果更改表以将现有列从 varbinary(8000) 更改为 varbinary(MAX),是否会丢失任何数据?
这两个脚本之间有区别吗?或者,第一个脚本的所有额外标记/属性(即:NONCLUSTERED,WITH...等...)是否都是 SQL Server 2008 中第二个脚本的默认值?
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)
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 > 扩展表 …
我有 SQL Server 2008 和一个具有完整恢复模型的数据库。通常,队列长度小于 1。但有时它会在几秒钟内增长到数千(3000 !!)。此时,许多写入查询以超时错误告终。
使用资源监视器,我发现此时 sqlserver.exe 将大量数据写入主数据库文件(MDF)。虽然它通常写入事务日志(LDF)。
使用 SQL Server Profiler,我发现当时没有运行大量查询。
我认为,这是某种SQL服务器的后台操作,但我想知道是哪种?
数据库还启用了 READ_COMMITED_SNAPSHOT 和镜像(同步模式)。这个事实可能是我问题的原因吗?
更新:我发现写入日志(而不是数据文件)是完全恢复模式的默认行为。并且日志只能通过备份事务日志操作复制到数据文件中。还是不明白为什么SQL server每十分钟复制一次日志...
我们公司有SQL Server 2008R2,并计划在2013年底或2014年初升级到2012。我想现在使用SSIS 2012,因为我们有软件。
我们有一个公司政策,我们不能在数据库服务器本身上运行 SSIS 包。我们从另一个应用程序服务器运行它们,而不是集成服务。
我的问题是,如果我要在我们的应用服务器上为 SSIS 安装所有 2012 组件,会不会有任何潜在问题?我还没有使用过 SSIS 2012,所以我不知道用于指向我们的 SQL 2008 实例的 OLE DB 组件 Id 是否会成为一个问题。
我想从重复1万行table1至table2。我用这样的查询写了一份工作:
delete from table1 OUTPUT *.delete into table2
Run Code Online (Sandbox Code Playgroud)
我每小时都在执行这项工作,但需要很长时间。
另一个问题是我的日志文件大小不断增加。我怎样才能解决这个问题?
按照以下所列说明将兼容性级别设置为 SQL Server 2008 后,我尝试恢复 SQL Server 2012 数据库:http : //learnsqlwithbru.com/2012/01/11/setting-database-compatibility-level- for-sql-server-2012/
但是,恢复仍然不起作用,我得到“指定的强制转换无效”。有什么办法可以解决这个问题吗?
注意:我不想使用生成脚本选项。
sql-server-2008 ×10
sql-server ×6
index ×2
datetime ×1
insert ×1
java ×1
partitioning ×1
performance ×1
ssis ×1