标签: sql-server

哪个 SQL Server 版本支持 CDC?

有谁知道哪个 SQL Server 2014/2016 版本/版本支持 CDC(变更数据捕获)?

sql-server sql-server-2014 sql-server-2016

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

我应该禁用系统数据库上的来宾用户吗

来宾用户在我们的用户数据库上被禁用,但数据安全人员希望我们也在系统数据库上禁用它。我应该这样做吗?

sql-server users availability-groups sql-server-2014

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

Sql Where语句动态与案例

我有一个存储过程,我在其中传递了 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 个值?

sql-server t-sql

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

恢复模式是完整的还是简单的,备份过程有什么区别吗?

过去,我完成了服务器迁移,并通过此脚本模板通过备份移动了我的数据库。

BACKUP DATABASE [ExampleDB] TO  DISK = N'D:\Backups\ExampleDb.bak
Run Code Online (Sandbox Code Playgroud)

我在新服务器上恢复了 bak 文件。出乎意料的是,用户报告迁移后数据丢失,我通过检查旧服务器中的数据对其进行了验证。大约 8 小时数据丢失。这对我来说是非常意外的时刻。

我的问题是通过该脚本进行备份将为我提供完整备份,无论它是在完整恢复模式还是简单恢复模式下?

换句话说,无论恢复模式是简单还是完整,当我获得备份时,备份文件之间有什么区别吗?

sql-server backup sql-server-2016

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

声明变量用作表名的占位符文本,而不是使用声明表类型

下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是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 中是否有可能实现我的设想?

sql-server t-sql

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

无法理解锁定逻辑

在尝试创建死锁时,我遇到了无法理解的锁定问题:我正在更新按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 locking sql-server-2014

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

如何输出到具有关系信息同表的同一行?

这是我当前的 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。该 …

sql-server

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

DBCC LOGINFO 列“状态”中的 2 是否意味着它不能被截断?

当我运行命令时DBCC LOGINFO,一些Status行包含 2。

现在我想检查为什么我的事务日志不能被截断。我怎么看这个?2 是否意味着Status它们不可重用或操作正在等待(备份、恢复)?是说不能截断吗?

sql-server dbcc transaction-log

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

对于基本可用性组中的每个数据库,我是否需要每个子网的单独 IP 地址?

我有一对在两个不同子网中运行的 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 availability-groups sql-server-2016

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

事务日志查询

我使用这些查询从 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。我可以运行任何命令来检查日志文件中的事务数吗?

谁能解释我如何使这些查询工作以恢复事务日志中的每个事务?

sql-server transaction-log

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