我一直在阅读这个,但在线文档有点难以理解,而且看起来很笨拙。例如INIT
,NOINIT
。有人说它会尝试覆盖所有内容。另一个说无论如何它都会附加。
我想要介于两者之间的东西。我希望过期的媒体集不再存在于文件中,但要让新的备份作业与尚未过期的媒体集一起附加到文件中。
下面的 SQL 会执行所需的备份吗?
BACKUP DATABASE [mydb]
TO DISK = N'c:\Backups\mydb.bak'
WITH NOFORMAT, NOINIT, NAME = N'mydb-Full Database Backup', NOSKIP,
NOREWIND, NOUNLOAD, STATS = 10, RETAINDAYS = 60
GO
Run Code Online (Sandbox Code Playgroud)
如果我运行上面的,并且有一个超过 60 天的备份集,它会从文件中删除吗?
编辑:
为了响应 RichardTheKiwi 的建议,我每次都重写了代码以创建一个新文件。然后我将编写一个 Windows 脚本来删除早于某个日期的文件
declare @filename varchar(max)
set @filename = 'c:\sqlbackups\pptd_' + replace(replace(convert(varchar, getdate(), 120),':','_'),' ','_') + '.bak'
BACKUP DATABASE [Peter's pointless test database]
TO DISK = @filename
WITH FORMAT, INIT, NAME = N'pptd-Full Database Backup',
NOREWIND, NOUNLOAD, STATS = 10 …
Run Code Online (Sandbox Code Playgroud) 我意识到这可能被标记为重复,但我特别询问 SQL Server 2005
我在互联网上阅读了相互矛盾的建议,所以我在这里问。特别是在 SQL Server 2005 中,varchar 列中的 NULL 是否与空字符串占用相同的空间?
我在另一个驱动器上构建了一个“持有”表,并用源表中的数据填充它,并且在字段为nullif([field],'')
空的地方,我曾经插入空值来代替空值。
然后我构建了一个与保存表结构完全相同的新表,但我没有用 null 替换空白,而是插入了空白,到目前为止它似乎占用了更多空间(我还没有完成填充它和我无法确定它是否正在占用更多数据)
所以在我进一步填充它并最终得到一个比我想象的更大的表格之前,我最好插入空值还是空白?
编辑:
将数据从持有表迁移到新表后,新表大约大了 4gb。
表设计中只有两个小的差异 - 'serial_number' 字段在保持表中是 char(15) 而在目标表中是 varchar(15)。(序列号的最大长度是 14 并且有很多空值——如果我记得的话,我想大约是 3000 万),并且持有表的聚集索引有一个额外的列 - program_name..
拿着桌
USE [Temp_holding_EWS]
GO
/****** Object: Table [dbo].[AmtoteAccountActivity_holding]
Script Date: 02/17/2017 20:41:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[AmtoteAccountActivity_holding](
[_Date] [char](8) NULL,[Community] [varchar](10) NULL,
[AccountNumber] [varchar](50) NULL,
[Branch] [varchar](10) NULL,
[Window] [varchar](3) NULL,
[Time] …
Run Code Online (Sandbox Code Playgroud) 我想创建一个user
对服务器内两个数据库的访问最少的数据库。该用户将由第三方人员使用,将商业智能工具集成到我们的数据库中。他们已经指定他们只需要创建视图。
所以,我在服务器上创建一个新用户,那么使用的每个数据库的数据库属性授予他们SELECT
和CREATE VIEW
特权数据库。
然后我使用该用户登录 SSMS,并尝试创建一个视图,但我收到一条消息说
'dbo' 要么不存在,要么我无权使用它。
我试图通过反复试验自己解决这个问题,但我只是不了解 sql server 上的用户权限。我做错了什么,我需要采取哪些额外/不同的步骤?
请记住,我不希望他们拥有比他们需要的最低限度更多的控制权。
我在 SQL Server 2005 中有一个巨大的表。(该表大约 40GB)我正在寻找最安全、最轻松的方式来释放空间或延迟其增长。
该表具有三个固定长度 ( char(10)
) 列,它们 a) 完全不需要,b) 几乎完全填充了NULL
.
如果我删除这些列,SQL Server 是否会在导入新记录时开始使用数据文件中释放的空间?或者由于分散在许多记录上,它们的碎片性质(我假设)是否意味着 SQL Server 将出于性能原因忽略该空间?
如果我删除它们,我可以运行收缩数据库来释放空间吗?
我是唯一使用这个数据库的开发人员,我知道这些列对于需求来说是多余的。15 年前,当不同的懒惰开发人员创建此数据库时,它们与其他所有列一起添加到平面文件中。
我一直在尝试编写一个函数来检查一个字符串是否包含一个数字,而该数字不是更大数字的一部分(换句话说,如果要搜索的数字是 '6' 而字符串是 '7+16+2'它应该返回 false,因为这个字符串中的 '6' 是数字 '16' 的一部分)
我写了下面的函数(它很长,但我打算在重构之前先测试它)
在测试时,我发现了一个错误,它仅通过逻辑运行找到的数字的第一个实例。因此,使用 '6' 对 '16+7+9+6' 运行此函数将返回 false,因为它确定第一个 '6' 是更大数字的一部分并停止处理。
我认为要解决这个问题,我必须实现一个循环来缩短 'haystack' 字符串(这样,使用示例 '16+7+9+6',该函数在消除后继续检查 '+7+9+6'第一个“6”)但在花时间使已经复杂的函数变得更加复杂之前,我想检查是否有更简单的方法来实现相同的目标?
drop function dbo.runners_contain_runner
go
create function dbo.runners_contain_runner(@runner varchar(max), @runners varchar(max))
returns int
as
begin
/*
eliminate the plus sign from @runners so that the
'isnumeric' function doesn't return false positives (it returns 1 for '+')
*/
set @runners = replace(@runners,'+','_' )
declare @ret int;
set @ret = 0;
-- if the runner is the only runner return …
Run Code Online (Sandbox Code Playgroud)