小编Ian*_*emp的帖子

执行跨数据库事务时,信息存储在哪个事务日志中?

鉴于以下代码段:

-- error checking omitted for brevity
begin tran

exec database1..my_stored_procedure
exec database2..my_other_stored_procedure

if (@@error <> 0)
  rollback

commit
Run Code Online (Sandbox Code Playgroud)

事务信息将插入到哪个数据库的事务日志中?

我希望两个日志都能获得所有数据,因为如果您尝试重放database1事务日志并且它只影响该数据库,那将毫无意义。我还希望您无法database1database2不存在的服务器上重放的事务日志,反之亦然。

.. 但我愿意接受更正!

sql-server sql-server-2008-r2 transaction-log

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

如何防止我的 Windows Server 被 SQL Server 更新自动重新启动?

某些 SQL Server 更新发生在维护时段之外,这导致服务器重新启动。我怎样才能阻止这种情况在未来再次发生?

以下是我在查看 Windows 更新设置时可以看到的内容:

在此处输入图片说明

sql-server windows windows-server sql-server-2016 patching

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

为什么 case/iif 返回可为空的数据类型?

考虑以下 sproc:

create or alter procedure TestSproc
as
begin

declare @ZeroBit bit = 0, @OneBit bit = 1

-- Table.Id is a nullable integer column
select iif(Table.Id is null, @ZeroBit, @OneBit) as ColumnNotNull

end
Run Code Online (Sandbox Code Playgroud)

编译完成后,运行以下命令:

select name, system_type_name, is_nullable
  from sys.dm_exec_describe_first_result_set_for_object(object_id('TestSproc'), 0)
Run Code Online (Sandbox Code Playgroud)

显示ColumnNotNull正确键入为 a的列bit但它可以为 null

可空性对我来说没有意义,因为我传递给的参数iif是非空常量,那么为什么结果列可以为空?是否有可能让它不可为空而不用包装表达式isnull来解决这个问题,在我看来这是 - 或者更确切地说,应该是 - 不必要的?

的文档iif没有提到可空性,只是说明此函数“从 true_value 和 false_value 中的类型中返回具有最高优先级的数据类型”。

sql-server t-sql

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

在 cast/convert 中使用 varchar(max) 而不是 varchar(n) 对性能有什么影响吗?

考虑以下表达式,它从日期时间值截断(不舍入)毫秒数:

declare @now datetime2 = sysdatetime();
select @now;
select convert(datetime2, convert(varchar(20), @now, 120));

-- Output
2021-07-30 09:38:33.5566666
2021-07-30 09:38:33.0000000
Run Code Online (Sandbox Code Playgroud)

请注意varchar(20). 我不喜欢那个特定的长度值,因为如果我应该更改我的数据类型,可能会丢失数据:

declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(20), @now, 120));

-- Output
2021-07-30 02:39:12.7200000 -07:00
2021-07-30 02:39:12.0000000 +00:00 -- oops, we lost the time zone too!
Run Code Online (Sandbox Code Playgroud)

因此,我更愿意使用以下内容:

declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(max), @now, 120)); -- note …
Run Code Online (Sandbox Code Playgroud)

performance sql-server datatypes

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