小编Nat*_*ate的帖子

在 SQL Server 计算列上指定类型

我刚刚在表中添加了一个计算列,它显示为一个int,我想让它成为一个bit这可能吗?我很难找到这方面的任何信息。下面是计算列:

IsActive  AS case when DateDecommissioned is null then 0 else 1 end PERSISTED 
Run Code Online (Sandbox Code Playgroud)

sql-server

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

如何找出是什么导致我的身份栏不断上升

我有一张桌子int identity作为 PK。有些东西导致它增加,我想知道那是什么。

举个简单的例子,昨天我插入了一条记录,得到了 ID 41,773。今天我插入了一个新记录,我得到了 ID 44,898。这些之间没有带有 ID 的记录。

有很多应用程序可以访问数据库,所以我正在检查它们的日志是否有错误;但是,我想知道是否有一种方法可以在不插入记录的情况下找出导致 IDENTITY 增量的查询。

这个表上也没有显式删除,所以我知道它不是插入+删除组合,导致这个,它必须是失败的。

sql-server

5
推荐指数
1
解决办法
373
查看次数

将数据和/或架构从 DBv1 迁移到 DBv2

我有一个生产数据库,它已经被关闭了几个月。我一直在对测试/开发服务器上的重复副本进行修改。我已经向几个表添加了一些额外的字段(允许为空),并且我已经向新表和现有表添加了一些新表和索引。

我的问题是:我已准备好使用我的测试/开发数据库并将其投入生产。问题是我需要将所有数据从我的生产数据库迁移到我的测试/开发数据库。我的第一个想法是使用 SSMS 将数据从生产“导入”到测试/开发,我遇到的问题是即使使用“启用身份插入”,我仍然会遇到所有类型的外键约束错误。这有点像两部分

  1. 有没有比我刚刚概述的过程更好的方法将架构更改从测试/开发迁移到生产?
  2. 如果没有,有没有办法在导入过程中暂时禁用所有插入约束?

我很乐意只将我的测试/开发模式迁移到我的生产服务器,但我还没有找到任何方法来做到这一点,而无需手动逐表、逐索引、逐视图、逐存储过程的存储过程。 . 等我已经看到一些声称能够做到这一点的工具,但我正在寻找一个免费/开源的解决方案并且没有找到任何东西。

注意:数据库很小 < 10gb,测试/开发数据库被完全截断,每个表中的记录为零。

sql-server migration ssms

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

为什么我需要使用子查询来过滤分组选择?

如果我这样做——

SELECT dv.Name
      ,MAX(hb.[DateEntered]) as DE
FROM 
    [Devices] as dv
    INNER JOIN 
    [Heartbeats] as hb ON hb.DeviceID = dv.ID
WHERE DE < '2013-03-04'
GROUP BY dv.Name
Run Code Online (Sandbox Code Playgroud)

我收到这个错误——

消息 207,级别 16,状态 1,第 17 行 列名“DE”无效。

如果我这样做——

SELECT Name, DE FROM (
    SELECT dv.Name
          ,MAX(hb.[DateEntered]) as DE
    FROM 
        [Devices] as dv
        INNER JOIN 
        [Heartbeats] as hb ON hb.DeviceID = dv.ID
    GROUP BY dv.Name
) as tmp WHERE tmp.DE < '2013-03-04'
Run Code Online (Sandbox Code Playgroud)

它按预期工作。

有人可以解释为什么我需要将主查询嵌套为子查询来限制我的数据集吗?

另外,这里是否有更好的方法来实现目标?从一张表中检索所有记录,以及按[DateEntered]降序排列的单个“顶部”相关记录?

sql-server-2008 sql-server t-sql subquery

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

需要一种方法来查询一个表,并将它与另一个表中的 TOP 1 相关记录连接起来

作为这个问题的后续,我想知道是否有更好和/或更有效的方法来收集相关数据。

如前所述,这个查询确实返回了我需要的 95% 的数据——

SELECT dv.Name
      ,MAX(hb.[DateEntered]) as DE
FROM 
    [Devices] as dv
    INNER JOIN 
    [Heartbeats] as hb ON hb.DeviceID = dv.ID
GROUP BY dv.Name
HAVING MAX(hb.[DateEntered]) < '20130304';
Run Code Online (Sandbox Code Playgroud)

有没有办法实现相同的结果(对于每个设备,选择由 DateEntered 排序的 TOP Heartbeat 的 DESC)而且还从表中选择整行[Heartbeats]?现在,我只得到那DateTime一行的。

如果我在GROUP BY子句中包含其他列,则可以将它们添加到选择中;但后来我每[Devices]行得到多行,这是我不想要的。这听起来很奇怪,但我基本上想要做的是对它进行查询[Devices],然后for...each对该集合进行查询并[Heartbeats]为该[Devices]行添加第一行。那可能吗?

更新 这是心跳表的结构:

CREATE TABLE [dbo].[Heartbeats](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DeviceID] [int] NOT NULL,
    [IsFMSFMPUp] [bit] NOT NULL,
    [IsFMSWebUp] [bit] NOT NULL,
    [IsPingUp] …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql select

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

sql server management studio 2008 内存不足,导致 .net 运行时失败

问题 sql server management studio 2008 占用内存,导致 .net 运行时错误。它崩溃并在错误对话框中显示一条空消息,但可以找到一个小的事件日志条目,内容如下:

<EventData>
  <Data>.NET Runtime version 2.0.50727.5446 - Fatal error in the execution engine (7269AECA) (0).</Data> 
</EventData>
Run Code Online (Sandbox Code Playgroud)

原始事件日志条目(德语):

<EventData>
  <Data>.NET Runtime version 2.0.50727.5446 - Schwerwiegender Fehler im Ausführungsmodul (7269AECA) (0).</Data> 
</EventData>
Run Code Online (Sandbox Code Playgroud)

重现错误

在针对 SQL Server 2005 的远程实例在循环中执行大约每 1000 万次 Insert-Statement Management Studio 2008 后,我的开发工作站上的 4GB 内存已启动,这导致上述错误。为什么我在循环中执行插入语句?- 由于 SQL Server 不允许手动设置数据库的实际 TIMESTAMP,因此需要使用 dummy-data-manipulation-statements 来帮助解决(TIMESTAMP-manipulation-lock 不是坏主意,但有时在开发环境中需要)。

CREATE TABLE __DUMMY (I INT, TS TIMESTAMP)
DECLARE @FROM INT
DECLARE @TO INT
SET @FROM = 666
SET @TO …
Run Code Online (Sandbox Code Playgroud)

sql-server ssms timestamp

3
推荐指数
1
解决办法
1133
查看次数

将数据从生产转移到测试的简单或可调度的方式

我想要做的是安排将数据从我的生产数据库复制到我的开发/测试数据库。

开发/测试数据库在架构方面将比生产数据库更新,但生产数据库具有当前数据。我有点困惑,因为我需要针对生产规模数据测试我的数据库更改,拥有当前数据会非常有帮助。

我在 SQL Server 2008 R2 Standard 上用于生产和开发环境;有没有一种方法可以在我的开发服务器上创建一个作业,以只读方式从我的生产数据库中“吸取”数据?我想要一个脚本,可以批量复制表数据,忽略丢失的列并忽略目标表中的任何约束。一个为一张表执行此操作的脚本是我真正需要的,我可以修改它以适合我的表并复制它以运行我的所有表。我遇到的问题是发现任何与此类似的东西。

这是对我最后一个相同性质的问题的跟进;从那以后,我将我的数据库纳入了源代码管理,而且我更喜欢它。问题是我的开发服务器上仍然面临陈旧的数据问题,所以我想找到一种安排更新的方法。

我愿意采用其他方法来实现这一点,但它必须是我可以按计划运行的东西,并且我可以使用记事本和/或 SSMS 或标准版 SQL Server 提供的其他工具构建。

sql-server testing development

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

将数据从一个数据库中的自定义架构移动到新数据库中的默认架构需要哪些步骤

为了便于论证,让我们假设我在单个 SQL Server 数据库中有以下表。

mySchema.Users
mySchema.Products
-- 
secondSchema.Users
secondSchema.Contracts
secondSchema.ContractItems
--
oldSchema.People
oldSchema.Table1
oldSchema.Table2
oldSchema.Table3
oldSchema.Table4
-- 
and so on and so forth
Run Code Online (Sandbox Code Playgroud)

每个“模式”都完全独立于其他“模式”。它们位于单个数据库中的唯一原因是托管和成本限制。在一个完美的世界中,这些本来应该在单独的数据库中。

当(如果有的话)我需要将 secondSchema 移动到一个新数据库时,我需要做什么,这完全是因为它的使用量增加了,现在需要将它存放在自己的数据库中。


我已经查看了关于何时使用非 dbo 模式与新数据库的决策标准,正如我上面所说的,它们在同一个数据库中没有关系或事务的理由。他们在那里是出于成本原因。

schema sql-server

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