有谁知道哪个 SQL Server 2014/2016 版本/版本支持 CDC(变更数据捕获)?
来宾用户在我们的用户数据库上被禁用,但数据安全人员希望我们也在系统数据库上禁用它。我应该这样做吗?
我有一个存储过程,我在其中传递了 0、1、2 的值。
0= 无,其中 1= 持续时间 >0 2= 持续时间 =0
select * from Table where case when @duration =1 then Duration else 1 end >0
这有效,但是我无法让其他值起作用。我已经尝试了 3 个 case 语句,但只有最后一个有效。
我怎样才能得到一个动态的 where 语句来处理 3 个值?
过去,我完成了服务器迁移,并通过此脚本模板通过备份移动了我的数据库。
BACKUP DATABASE [ExampleDB] TO DISK = N'D:\Backups\ExampleDb.bak
Run Code Online (Sandbox Code Playgroud)
我在新服务器上恢复了 bak 文件。出乎意料的是,用户报告迁移后数据丢失,我通过检查旧服务器中的数据对其进行了验证。大约 8 小时数据丢失。这对我来说是非常意外的时刻。
我的问题是通过该脚本进行备份将为我提供完整备份,无论它是在完整恢复模式还是简单恢复模式下?
换句话说,无论恢复模式是简单还是完整,当我获得备份时,备份文件之间有什么区别吗?
下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是YEAR2016..report_Nov2016,但下个月的表名将以_Dec2016. 我想在代码的开头使用一个声明变量,而不是使用 find&replace 来更改所有表名(10 次),这样我只需更改一次表名,它就会在整个代码中得到反映。
declare @table varchar(30)
set @table ='YEAR2016..report_Nov2016'
select recipient_ID, recipient_Name, recipient_DOB,program_code
into @table
from YEAR2016..claim_table
Run Code Online (Sandbox Code Playgroud)
分开批次
alter table @table
add Medicaid char(1)
GO
update @table set Medicaid =''
GO
update @table set Medicaid ='Y' where program_code ='MK A'
Run Code Online (Sandbox Code Playgroud)
据我了解,declare @table table ()应该使用,但这不会实现我的意图,因为需要在数据库中创建一个表。我也知道,使用声明表类型,into @table将无法工作,需要是Insert into @table.
在 TSQL 中是否有可能实现我的设想?
在尝试创建死锁时,我遇到了无法理解的锁定问题:我正在更新按timekey列分区的大表:

我正在尝试运行两个更新语句:
BEGIN TRAN
UPDATE [Transform].[AllCommunications_Arch]
SET Callid = 10300503454
WHERE Callid = 10348103154
AND TimeKey = 20161205
Run Code Online (Sandbox Code Playgroud)
和
BEGIN TRAN
UPDATE [Transform].[AllCommunications_Arch]
SET Callid = 1234576704
WHERE Callid = 4321276791
AND TimeKey = 20160720
Run Code Online (Sandbox Code Playgroud)
每个人都应该更新一行,每个人都在不同的分区上运行,但由于某种原因,一个语句仍然阻塞另一个。DB 具有默认隔离杆(已提交读)。

CREATE TABLE [Transform].[AllCommunications_Arch](
[SessionId] [varchar](100) NULL,
[TimeKey] [int] NULL,
[Callid] [bigint] NULL,
[MemberId] [int] NULL,
[Duration] [int] NULL,
[CalledAt] [datetime] NULL,
[EndTime] [datetime] NULL....
) ON [Transform_Timekey_Daily_Arch_PS]([TimeKey])
WITH
(
DATA_COMPRESSION = PAGE
)
GO
CREATE CLUSTERED INDEX [CL_Transform_AllCommunications_Arch] ON [Transform].[AllCommunications_Arch] …Run Code Online (Sandbox Code Playgroud) 这是我当前的 SQL Server 查询,几乎是我想要做的:
select "dokumentgruppe" + ', ' + convert(varchar(10), dokumentgruppenr)
+ ', ' + 'Parent:' + convert(varchar(10), parentgruppenr)
as "Dokumentgruppe"
from "dbo"."dokumentgruppe"
where aktiv = '1'
order by "Dokumentgruppe"
Run Code Online (Sandbox Code Playgroud)
它给了我这个结果:
Budsjetter, 29, 家长:0 电子邮箱, 36, 家长:0 Fyllearrester, 40, 父母:38 Inngående, 42, 父母:36 JuksOgFanteri, 38, 家长:0 Legeattester, 39, 家长:38 林宁, 26, 家长:0 Periodiske regnskapsrapporter, 30, 家长:0 Permanente opplysninger, 23, 家长:0 Produksjon Fakturing, 33, 家长:0 Produksjon Lønn, 32, 家长:0 Produksjon Regnskap, 31, 家长:0
问题是,我想说明的实际名称的Parentgruppe替代ParentgruppeID。该 …
当我运行命令时DBCC LOGINFO,一些Status行包含 2。
现在我想检查为什么我的事务日志不能被截断。我怎么看这个?2 是否意味着Status它们不可重用或操作正在等待(备份、恢复)?是说不能截断吗?
我有一对在两个不同子网中运行的 SQL Server(在 AWS 中,如果重要的话)和几个我想在基本可用性组中运行的数据库。
我的理解是,在 SQL Server 2016 Standard 中,每个数据库都需要一个单独的可用性组。此外,至少在用户界面中,AG 侦听器似乎只能属于单个可用性组。
当我尝试为另一个 AG 侦听器重用 IP 地址时出现错误(即,将 10.0.0.1 和 10.0.1.1 用于 AG 侦听器 LISTENER1 和 LISTENER2)
我真的需要为每个 AG 以及每个数据库创建一个具有两个唯一 IP 地址的单独 AG 侦听器,还是有办法重用 IP 地址或 AG 侦听器?
我使用这些查询从 SQL Server 数据库访问事务
Use Action
Go
Select * from fn_dblog(null,null)
Run Code Online (Sandbox Code Playgroud)
此查询有效,但当数据库中的一个表包含超过 100,000 条记录时仅加载 7 行 接下来我使用此查询来恢复历史记录
SELECT * FROM fn_dump_dblog(NULL,NULL,'DISK',1
,'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Action.bak'
,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
这个查询没有错误,但只恢复了 37 行。如果我恢复备份,一张表中有超过 100,000 条记录。当我运行这些查询时,我希望看到数百或数千行。
唯一合乎逻辑的答案是文件中的事务是有限的。但事务日志的文件大小为 1.5 GB。我可以运行任何命令来检查日志文件中的事务数吗?
谁能解释我如何使这些查询工作以恢复事务日志中的每个事务?