相关疑难解决方法(0)

与 2008 R2 相比,更喜欢 SQL Server 2012 的客观商业原因是什么?

我的公司正面临为新的数据库服务器购买 SQL Server 2012 Denali 还是 SQL Server 2008 R2 的决定。我正在寻找客观的理由来选择一个。

我们的要求:

  • 标准版(出于经济原因和不需要企业功能)
  • OLTP 工作负载(这意味着我们不需要新的窗口函数和列存储索引)
  • 数据库大小 10-100 GB
  • 不需要商业智能功能。只需要关系引擎
  • 同步数据库镜像

目前,我知道以下原因:

SQL Server 2012 德纳利

  • 最新版本可用

SQL Server 2008 R2

  • 成熟的技术

我似乎找不到很多技术原因来偏爱其中一个。基本上,这归结为选择成功运行的成熟技术与可用的最新和最好的版本。

做出决定的客观原因是什么?

sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012

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

带有输出的 MERGE 是否比条件插入和选择更好的做法?

我们经常会遇到“如果不存在,则插入”的情况。Dan Guzman 的博客对如何使此进程线程安全进行了出色的调查。

我有一个基本表,它只是将字符串从SEQUENCE. 在存储过程中,我需要获取该值的整数键(如果它存在),或者INSERT它然后获取结果值。该dbo.NameLookup.ItemName列有一个唯一性约束,因此数据完整性没有风险,但我不想遇到异常。

这不是一个IDENTITY所以我无法获得,SCOPE_IDENTITY并且NULL在某些情况下价值可能是。

在我的情况下,我只需要处理INSERT桌面上的安全问题,所以我试图决定是否使用MERGE这样的方法更好:

SET NOCOUNT, XACT_ABORT ON;

DECLARE @vValueId INT 
DECLARE @inserted AS TABLE (Id INT NOT NULL)

MERGE 
    dbo.NameLookup WITH (HOLDLOCK) AS f 
USING 
    (SELECT @vName AS val WHERE @vName IS NOT NULL AND LEN(@vName) > 0) AS new_item
        ON f.ItemName= new_item.val
WHEN MATCHED THEN
    UPDATE SET @vValueId = f.Id
WHEN NOT MATCHED BY TARGET THEN
    INSERT …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql merge sql-server-2014

12
推荐指数
2
解决办法
4890
查看次数

如何在 SQL Server 中的多键 MERGE 中仅删除相关记录?

假设你有这样的事情:

源表(变量):

Values (
  LeftId INT NOT NULL,
  RightId INT NOT NULL,
  CustomValue varchar(100) NULL
)
Run Code Online (Sandbox Code Playgroud)

目标表:

Mapping (
  LeftId INT NOT NULL,
  RightId INT NOT NULL,
  CustomValue varchar(100) NULL
)
Run Code Online (Sandbox Code Playgroud)

我想合并ValuesTarget以下规则:

  • 匹配 source.LeftId = target.LeftId AND source.RightId = target.RightId
    • 当与目标匹配时,更新 CustomValue
    • 当与目标不匹配时,插入
  • 在目标删除任何不匹配的值匹配LeftId源,即只能删除记录中涉及到LefId什么,我合并的秒。

(最后一条规则很难描述,抱歉!)

例如:

来源:

1, 10, foo
1, 11, foo
Run Code Online (Sandbox Code Playgroud)

目标:

1, 10, bar
1, 12, foo
2, 20, car
Run Code Online (Sandbox Code Playgroud)

合并结果:

结果目标:

1, 10, foo (updated)
1, …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 merge

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