标签: sql-server

在数据库中添加新列的正确方法

当我们向现有表中添加新列时,正确的方法是什么?

例如,我已经有像 Foo1、Foo2、Bar1、Bar2 这样的列。现在我想添加一个名为 Foo3 的新列。

当我想添加具有相似名称的列时,标准方法是什么(如果是这样的话)?

我看到 2 个选择:

  1. 创建具有新结构的临时表,其中新列位于同名列的旁边,将数据从现有表复制到新表并删除现有表并重命名临时表。有点复杂的过程,但使数据库字段更具可读性。
  2. 最后添加新列。操作更简单。但是列名如果放在最后可能不会被清楚地理解。

为了获得一些参考,我们正在使用数据库项目来控制数据库更改,并为应用程序开发人员提供更好的 GUI 以进行数据库更改。我们使用某种 ORM 与数据库交互,因此没有人使用数据库对象名称查询数据库。

更新: 我在一些现有列上有几个索引。但是名称相似的列(包括我想添加的列)不属于任何索引。

index source-control database-design sql-server table

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

从 SQL 查询中排除记录

我有一个表,我试图只返回 rendition_type Interactive 的记录,而没有其他关联的 rendition_type。如果一个记录有多个 rendition_type,我需要将它从列表中排除。

DOC_ID    RENDITION_ID    RENDITION_TYPE
001       001             Interactive
001       002             Web PDF
002       003             Interactive
003       004             Interactive
003       005             Print PDF
004       006             Interactive
005       007             Interactive
005       008             Web PDF
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个查询,该查询将仅返回 document_ID 的 Rendition_type 类型仅为 1 且该类型为 Interactive 的行。

sql-server t-sql sql-server-2017

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

无法在探查器中跟踪“将数字转换为数字数据类型的算术溢出错误”错误

我有一个 .net 应用程序。它试图创建表、视图并将数据插入/更新到许多表中。应用程序运行时出现错误。

我尝试在 SQL Profiler 中跟踪查询,但没有发现任何错误。有什么方法可以跟踪错误语句,或者我需要在探查器中添加任何其他事件。

我已经尝试过以下事件(例外):

  • RPC:已完成
  • RPC:开始
  • SP:开始
  • SP:已完成
  • SP:开始
  • SP:StmtCompleted
  • SQL:批量启动
  • SQL:批量完成

sql-server-2008 sql-server profiler

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

用有限的磁盘空间恢复数据库备份

我想使用大约 60GB 的备份 (.bak) 还原 SQL Server 数据库。

是否可以在只有 100GB 可用磁盘空间的机器上执行此操作?

或者我是否至少需要 60GB 的.bak文件和 60GB 的 SQL Server 上的最终数据库?

有没有办法将.bak文件复制到服务器中?

网络共享在 SSMS 中不可见 - 只有像 USB 设备这样的本地驱动器。

sql-server disk-space restore

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

如何在大量数据库中删除过程 (SQL Server 2016)

我有一个简单的过程,存在于 150 多个数据库中。我可以将它们一一删除,这是软件开发界最愚蠢的工作。或者我可以以某种方式在一个查询中动态删除它们,这很聪明但不起作用。

我试过了:

execute sp_msforeachdb 'drop procedure Usages'
Run Code Online (Sandbox Code Playgroud)

我有:

无法删除过程“用法”,因为它不存在或您没有权限。

所以我想也许我为它创建了一个游标。于是我写道:

declare @command nvarchar(max) = '
drop procedure Usages
';
declare @databaseName nvarchar(100)
declare databasesCursor cursor for select [name] from sys.databases where database_id > 5
open databasesCursor
fetch next from databasesCursor into @databaseName
while @@fetch_status = 0
begin
    print @databaseName
    execute sp_executesql @command
    fetch next from databasesCursor into @databaseName
end
close databasesCursor
deallocate databasesCursor
Run Code Online (Sandbox Code Playgroud)

再次,我收到了同样的消息。我想,也许它不会改变数据库的上下文,因此我在删除命令前面加上了给定数据库的名称,所以命令会变得类似于drop procedure [SomeDatabase].dbo.Usages,但后来我收到了:

“DROP PROCEDURE”不允许将数据库名称指定为对象名称的前缀。

所以,我想出动态执行,use @databaseName以便我可以在该数据库的上下文中删除过程。但它不起作用。我该怎么办?我被困在聪明的方法上,而且我现在比愚蠢的方法花费的时间更多。

sql-server stored-procedures cursors sql-server-2016

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

在哪里放单引号?

我正在尝试执行以下语句,该语句创建一个名为 service2019 的数据库:

DECLARE @dbname VARCHAR(50);
SET @dbname = 'service' + CAST(YEAR(GETDATE()) AS VARCHAR(4));


EXEC (
'CREATE DATABASE ' + @dbname  + ' ON  PRIMARY 
( NAME =' + '' + @dbname +'' + ', FILENAME = ''C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014TEST\MSSQL\DATA\''' + '''' + @dbname + '''' + '''.mdf'''  + ', SIZE = 10MB , MAXSIZE = UNLIMITED, FILEGROWTH = 100KB )
 LOG ON 
( NAME =' + '' + @dbname + '_log' + ', FILENAME = ''C:\Program Files\Microsoft SQL …
Run Code Online (Sandbox Code Playgroud)

sql-server dynamic-sql t-sql sql-server-2014 quoted-identifier

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

触发器在高度事务性的表上是否开始降低性能(或有时会失败)?

SQL Server 表触发器每秒可以处理多少事务?如果我有一个每秒插入 1,000 次的高度事务性表,该表上的插入触发器是否可靠地每次触发?

trigger sql-server sql-server-2016

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

差异备份与完整备份的大小相同

我有一个几乎 2 TB 大小的 SQL Server 数据库,它有带有图像数据类型的表。现在差异备份的大小与完整备份的大小相同。图像数据类型对此有什么影响吗?或者我错过了什么。

sql-server backup sql-server-2012 sql-server-2016

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

什么导致sql server为存储过程生成新计划?

我们已经在生产中遇到了几次问题,它看起来像一个存储过程获得了一个新的、糟糕的计划并开始造成严重破坏。不幸的是,在执行 dbcc freeproccache 之前,我们无法捕获之前和之后的计划以查看不良计划的情况,我们也没有设置查询存储。

我的问题是,什么会导致 sql server 为存储过程生成新计划?特别是对于一直运行的 sp。我知道的一些是:

  • dbcc freeproccache
  • 重新启动服务器
  • 选项重新编译

sql-server execution-plan sql-server-2016

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

处理 .bak 和 .dif 文件以优化存储使用

我正在使用许多严重缺乏备份的不同服务器。

我想使用简单模式实施备份计划,每周进行一次完整备份,然后在一周内进行一系列差异备份。

通过覆盖同一文件来执行完整备份和差异备份是否可行?我再次尝试限制使用的存储量,根据我的理解,如果我在某个时间间隔进行差异备份,则数据是累积的,因此只需要最新的 .dif 文件和完整的 .bak 文件。因此,每次执行差异备份时,它都会覆盖之前的备份。这是安全的还是我误解了一些重要的东西?

sql-server backup

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