小编Iam*_*mIC的帖子

集群与覆盖指数

请考虑SQL Server 2008中的下表:

LanguageCode  varchar(10)
Language      nvarchar(50)
Run Code Online (Sandbox Code Playgroud)

LanguageCode参与关系,因此我无法创建包含两列(LanguageCode,Language)的主键索引.

如果我在LanguageCode上放置一个主群集密钥,当然我不能在索引中包含语言(覆盖索引).这意味着我将不得不为Language创建第二个索引,或者冒着在其中包含重复项的风险(加上强制执行表扫描以检索其值).

此外,MS的文档(以及该主题的专家)表明理想情况下表应具有聚簇索引.

在这种情况下,非聚集覆盖索引(LanguageCode,Language)不仅可以确保语言是唯一的,而且可以避免表扫描.但是,没有"理想的"聚集索引.

这种没有聚集索引的情况实际上是理想的吗?

根据反馈进行修改:

我希望运行的唯一查询是:

SELECT Language, LanguageCode FROM Languages where Language="EN"
Run Code Online (Sandbox Code Playgroud)

sql-server indexing database-design

5
推荐指数
2
解决办法
2735
查看次数

T-SQL MERGE - 找出它采取的行动

我需要知道MERGE语句是否执行了INSERT.在我的场景中,插入是0或1行.

测试代码:

DECLARE @t table (C1 int, C2 int)
DECLARE @C1 INT, @C2 INT

set @c1 = 1
set @c2 = 1

MERGE       @t as tgt
USING       (SELECT @C1, @C2) AS src (C1, C2)
ON          (tgt.C1 = src.C1)
    WHEN MATCHED AND tgt.C2 != src.C2 THEN
        UPDATE SET tgt.C2 = src.C2
    WHEN NOT MATCHED BY TARGET THEN
        INSERT VALUES (src.C1, src. C2)
    OUTPUT deleted.*, $action, inserted.*;

SELECT inserted.*
Run Code Online (Sandbox Code Playgroud)

最后一行不编译(没有范围,不像触发器).我无法访问@action或输出.实际上,我不想要任何输出元数据.

我怎样才能做到这一点?

t-sql sql-server sql-server-2008

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

PostgreSQL 中表达式索引的实际限制

我需要使用 HSTORE 类型和键索引来存储数据。

CREATE INDEX ix_product_size ON product(((data->'Size')::INT))
CREATE INDEX ix_product_color ON product(((data->'Color')))
etc.
Run Code Online (Sandbox Code Playgroud)

使用表达式索引有哪些实际限制?就我而言,可能有数百种不同类型的数据,因此有数百种表达式索引。每个插入、更新和选择查询都必须针对这些索引进行处理,以便选择正确的索引。

sql postgresql indexing database-design expression

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

T4在编译时引用静态类中的const

我有一个T4 C#文件,我需要在静态类中引用一个常量.静态类位于同一名称空间中.

这可能吗?

以下仅仅是一个例子.我需要根据现有常量计算实际常量,但也需要调用扩展方法.为了简单起见,我只是在说明这个概念.

.cs文件:

namespace me
{
  public static class Stat
  {
    public const int Const = 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

.tt文件:

...
namespace me
{
  public static int Test
  {
    return <#= Stat.Const #>;
  }
}
Run Code Online (Sandbox Code Playgroud)

c# t4 visual-studio-2012

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

向Delphi ASM中的所有16个XMM插槽广播一个字节值

使用VBROADCASTS命令在AVX中很容易,如果值是double或float,则在SSE中很容易.

如何向Delphi ASM中的XMM寄存器中的每个插槽广播一个8位值?

delphi assembly sse delphi-7 basm

5
推荐指数
2
解决办法
663
查看次数

处理SQL Server catch语句中的回滚

在我的阅读中,我在SQL Server存储过程的CATCH部分中看到了两种处理事务回滚的方法:

1: if @@trancount > 0 ROLLBACK
2: if XACT_STATE() <> 0 ROLLBACK TRAN
Run Code Online (Sandbox Code Playgroud)

哪个更好?为什么?

sql-server error-handling stored-procedures transactions

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

什么时候会释放“嵌套事务”中的 XLOCK?

在 SQL Server 2008 中,我知道没有嵌套事务这样的东西。这些似乎只是存在。我也知道一些专家强烈恳求开发人员不要使用可用的伪嵌套事务。例如,这里

但是,我有一个案例,我需要在特定嵌套过程中的一行上使用 XLOCK,但仅限于该过程的持续时间。它必须是那个锁,我显然想尽快放下锁。在伪代码中:

...outer procedure
BEGIN TRAN Inner
EXEC InnerProcedure

    ...InnerProcedure...
    BEGIN TRAN Inner
    SELECT ... WITH (XLOCK, ROWLOCK)
    COMMIT TRAN Inner
    -- NEVER rollback here; get the outer procedure to do this
    ...End InnerProcedure...

COMMIT TRAN Outer
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 考虑到 SQL Server 并未真正嵌套事务,这是最佳实践模式吗?
  2. XLOCK 会在 COMMIT TRAN Inner 发布,还是只在 COMMIT TRAN Outer 发布?我想答案是肯定的。

sql-server scope stored-procedures locking transactions

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

使用SSE在Delphi中进行舍入

我编写了这个函数来将单例转换成整数:

function Round(const Val: Single): Integer;
begin
  asm
    cvtss2si eax,Val
    mov Result,eax
  end;
end;
Run Code Online (Sandbox Code Playgroud)

它有效,但我需要改变舍入模式.显然,按此,我需要设置MXCSR寄存器.

我如何在Delphi中执行此操作?

我之所以这样做的原因是我需要"远离零"舍入(就像在C#中一样),即使通过SetRoundingMode也是如此.

delphi sse rounding delphi-7 inline-assembly

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

Lazarus FPC在ASM中拒绝64位AND运算

以下内容无法编译:

and rax, $7FFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

我已经尝试将值设为常量,甚至将其作为qword投射,但编译器会抛出"dword值超出界限".

当然,这是一个qword,而不是dword.如何让编译器实现这一点?

请注意,64位代码正在编译并正确运行.

我有最新的Lazarus版本.

assembly freepascal x86-64 lazarus

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

PostgreSQL 时间戳转换中的奇怪时区

这个 SQL:

select to_timestamp(extract(epoch from '0001-01-01 00:00:00'::timestamp))
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

0001-01-01 08:06:00+08:06

我意识到to_timestamp()总是添加一个时区,因此额外的 8 小时和+8时区部分。但什么是:06?额外的 6 分钟从哪里来?

编辑

如果我最初执行,set local timezone to 'UTC';那么我会得到预期的结果。

postgresql timestamp timezone-offset timestamp-with-timezone postgresql-9.6

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