小编MDC*_*CCL的帖子

ALTER DATABASE SET ALLOW_SNAPSHOT_ISOLATION ON 需要永远

需要在 POC 的测试服务器上安装的供应商软件之一。当 setup.exe 尝试使用SET ALLOW_SNAPSHOT_ISOLATION ON.

测试服务器在 Microsoft SQL Server 2016 (SP1-CU8) 开发版上。

回滚到 SP1-CU5 后,SET ALLOW_SNAPSHOT_ISOLATION ON工作。

有没有人经历过同样的行为?除了回滚 CU 之外还有其他解决方法吗?

没有阻塞,也没有其他用户。POC 处于隔离的实验室环境中。在实时环境中使用 2016 SP1 CU7 在其他 2 个开发 SQL Server 上尝试,遇到相同的行为。

sql-server snapshot-isolation sql-server-2016

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

使用 ORDER BY 和 LIMIT 对每个组的 n 行求和,其中 LIMIT 是基于另一个表

我需要建立一个梦幻足球游戏用户排行榜。游戏的简化数据库如下:

  • users必须squad_playerssquads每一个matches(由相关transfer_period
  • playersmatch_points每个matches
  • squad_players位置优先。该优先级是如果换人的顺序squad_players不会出现在matches
  • squads具有formations确定从优先级排序的每个位置中选择的最大玩家数量

数据库为MySQL 5.6,最大数量users10K

我能够内部加入(按顺序)squad_players, squads, matches,match_points以获得每个squad_players玩过的人(players没有玩过的人没有match_points)的观点。

我奋力SUM的分X squad_playerssquads其中Xformations通过确定位置的的squad_players

我试图通过具有相关子查询的group by修改 …

mysql database-design group-by mysql-5.6 greatest-n-per-group

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

MariaDB - “ERROR 1205 ... Lock wait timeout exceeded; ...” 执行影响不同行的多个并行更新时

我们使用 MariaDB 10.1.19 托管旧数据库。我们有一个lpr表(在 InnoDB 上),我们想在其中从文本列移动gate到规范化外键gate_id。我们的代码并行执行 UPDATE,如下所示:

UPDATE lpr SET gate_id=1 WHERE gate_id IS null AND gate LIKE '%[1]%'
UPDATE lpr SET gate_id=2 WHERE gate_id IS null AND gate LIKE '%[2]%'
UPDATE lpr SET gate_id=3 WHERE gate_id IS null AND gate LIKE '%[3]%'
UPDATE lpr SET gate_id=4 WHERE gate_id IS null AND gate LIKE '%[4]%'
...
Run Code Online (Sandbox Code Playgroud)

由于受所有 UPDATE 影响的行是不相交的,并且表位于 InnoDB 上,我们不会期望锁争用,但我们得到错误:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

对于所有更新。提高innodb_lock_wait_timeout到100〜并不能改变什么,以及设置 …

mysql mariadb mariadb-10.1

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

从 Unix 日期获取年份 DATEPART

在我的数据库中,日期保留为自 1970 年 1 月 1 日起/之前经过的天数,我认为这是一种 Unix 日期格式,例如。今天是 2018 年 5 月 23 日,值为 17674。

我正在尝试select针对日期表中的列运行语句以仅显示年份。

如果我运行这个:

datepart(year, c.cko_date)
Run Code Online (Sandbox Code Playgroud)

我得到的日期是 1940 年代(应该是最近几年)。

当我跑

select datepart(year, getdate()) 
Run Code Online (Sandbox Code Playgroud)

它正确地告诉我日期是 2018 年。

关于我做错了什么的任何建议?

sql-server-2008 sql-server date-format format date

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

将行从“父”转移到“子”而不创建重复项并且不知道所有“父”列

我想建立一个具有不同模式的数据库,这些模式对应于不同的数据输入系统。需要有一个“master”(管理)模式和一个“party”表,以及多个其他模式,它们有自己的“party”表,这些表继承了 master party 表的字段

这是结构的一个简化示例:

'家长'

CREATE TABLE master.parties
(
  party_key serial NOT NULL,
  name text,
  date_of_birth date,
  phone text,
  CONSTRAINT "PK_master_parties" PRIMARY KEY (party_key)
)
Run Code Online (Sandbox Code Playgroud)

'孩子'

CREATE TABLE corporate.parties
(
  corp_key integer,
  corp_role text
) INHERITS (master.parties)
Run Code Online (Sandbox Code Playgroud)

我希望能够删除添加到 master.parties 表中的一行,并将其插入到其他模式(即公司)中的任何party表中,而无需在主表中创建重复的行。

我在另一篇文章(/sf/ask/2065641371/)上找到的这个解决方案非常接近我正在寻找的为了:

WITH deleted AS (
  DELETE FROM ONLY master.parties 
  WHERE party_key = 1
  returning *
)
INSERT INTO corporate.parties (name, date_of_birth, phone, corp_key, corp_role)
SELECT name, date_of_birth, phone, 2, 'President'
from deleted;
Run Code Online (Sandbox Code Playgroud)

但是,在我看来,应该有更好的方法将“父”表中的一行添加到“子”表中,而不必删除“父”表中的现有行。

该解决方案还带来了另一个更严重的问题:如果对主模式中的参与方表进行了更改(例如添加了新列),我不想更新与子模式对应的所有数据输入系统。 -schemas 在每个 INSERT …

schema postgresql duplication inheritance

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

了解一对一关系

据我了解,两个表之间的一对一关系意味着一个表中的每一行与另一个表中的一行完全匹配。

\n\n

其有用的原因有很多,例如虚拟地向表中添加列而不实际更改它。

\n\n

上面的描述表明这种关系是对称的:任一表中的行与另一个表中的行匹配。

\n\n

如果主键也是另一个主键的外键,那么这很容易完成:

\n\n
CREATE TABLE stuff (\n    id INT PRIMARY KEY REFERENCES more(id),\n    data VARCHAR(255)\n);\n\nCREATE TABLE more (\n    id INT PRIMARY KEY REFERENCES stuff(id),\n    data VARCHAR(255)\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这里可以看到一个逻辑问题:当另一个表中没有\xe2\x80\x99t 行匹配时,如何向一个表添加一行?

\n\n

更轻松的版本是一对零或一的关系,我更喜欢将其称为一对可能的关系。如果一个表引用另一个表,则很容易实现这一点,但反之则不然:

\n\n
CREATE TABLE stuff (\n    id INT PRIMARY KEY, --  does not reference the more table\n    data VARCHAR(255)\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

关系仍然是主键之间的关系,但只有一个方向。这在逻辑上更容易,并且可以用于实现可选列,而无需陷入有关NULLs 的使用的争论。

\n\n

问题是:

\n\n
    \n
  • 一对一关系真的是指第一种情况,即两个表在两个方向上匹配吗?
  • \n
  • 在这种情况下,您将如何添加一行?
  • \n
\n

foreign-key database-design

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

请赐教有关 FILESTREAM 和 BLOB 文件的信息

这对我来说真的是一个令人困惑的话题。

我可以理解 BLOB 是什么,我可以轻松使用它。我能理解 FILESTREAM 是什么。我可以轻松地在数据库中实现,我可以备份数据库并使用为存储这些文件而创建的文件夹来恢复它。像这样的事情,我想,我能理解。

我不明白的是:

  1. .PDF仅使用数据库中的 VARBINARY(MAX) 列插入(例如)与将其存储.PDF在 FILESTREAM 数据库中有什么区别。我知道 BLOB varbinary(max).PDF是在数据库内部。如果我物理删除.PDF,我仍然可以使用存储在 varbinary(MAX) 列中的值来恢复它吗?

  2. 当我在.PDF文件流中插入这个文件时,我可以在文件夹中看到它(为文件组创建的那个),如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行DELETE FROM并删除 100 行时数据库,我仍然可以在文件流文件夹中看到这些文件。为什么会发生这种情况?我认为,为了保持一致性,这些文件也会被删除。

  3. 对于这两种情况,在.PDFBLOBVARBINARY(MAX)或 FILESTREAM 中插入文件后,我还需要原始文件吗?因为它在数据库中,所以我可以很容易地恢复它。

我以 .PDF 为例

我可以使用和实施这两种方法,但我仍然不清楚它们会发生什么。对我来说,它是一样的,但是一个存储在数据库之外,另一个存储在数据库内。

sql-server sql-server-2008-r2 filestream blob varbinary

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

在使用 TRY CATCH 的 SQL Server 中提交事务的最佳实践

在 SQL Server 代码块中,放置提交事务的最佳位置是什么?在 try catch 块内部还是外部?

例如,选项 A 或选项 B 是正确的方法还是主观选择?

选项A

CREATE PROCEDURE DummyProc 
BEGIN TRY
      BEGIN TRANSACTION
      INSERT sometable(a, b) VALUES (@a, @b)
      INSERT sometable(a, b) VALUES (@b, @a)
      COMMIT TRANSACTION
   END TRY
   BEGIN CATCH
      IF @@trancount > 0 ROLLBACK TRANSACTION
      DECLARE @msg nvarchar(2048) = error_message()  
      RAISERROR (@msg, 16, 1)
      RETURN 55555
   END CATCH   
Run Code Online (Sandbox Code Playgroud)

选项B

CREATE PROCEDURE DummyProc 
BEGIN TRY
      BEGIN TRANSACTION
      INSERT sometable(a, b) VALUES (@a, @b)
      INSERT sometable(a, b) VALUES (@b, @a)

   END TRY
   BEGIN …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql transaction exception code

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

我们如何使用 DQS 或 MDS 修剪坏数据并输出干净的修剪数据?

到目前为止,我们一直使用存储过程进行数据处理和清理,但现在我们决定在我们的数据仓库项目中使用数据质量服务 (DQS) 和主数据管理 (MDS)。

我们在存储过程中使用了一个非常常见的函数 - 它修剪并用,空格替换字符,例如:

UPDATE [Table] SET Column=(ltrim(rtrim(replace(Column,',',''))))
Run Code Online (Sandbox Code Playgroud)

我花了几个小时想出一种使用 DQS 和 MDM 实现这一目标的方法,但找不到任何方法来实现相同的目标。

如果你们能帮我解决这个问题,我将不胜感激。事实上,已经感谢您抽出宝贵的时间。

sql-server sql-server-2012 master-data-services data-quality-services

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

PostgreSQL 中的“块”和“页”是同一个东西吗?

我看过很多讨论 Postgres“块”的博客和视频。这些与其他数据库管理系统实现中的“页面”相同吗?

postgresql terminology

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