AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-53731

Nelson's questions

Martin Hope
Nelson
Asked: 2017-05-03 04:43:24 +0800 CST

用于存储附加唯一标识符的单行表

  • 2

我刚遇到一个有点旧的数据库(和前端),它有一种有趣的方式来处理唯一 ID 方面的问题。

我有一个表,其中只有一列和一行存储一个整数(当前为 31448)。这个数字在Invoices表上用作“InvoiceNo”,该Invoices表也有一个唯一的 auto-inc id(当前为 2847)

它看起来有点像这样:

CREATE TABLE InvoiceNumber(
    LatestId [int] NOT NULL
) ON [PRIMARY]
GO

CREATE TABLE Invoices(
    InvoiceId [int] IDENTITY(1,1) NOT NULL,
    InvoiceNo [int] NOT NULL,
    Amount [decimal](18, 2) NULL
) ON [PRIMARY]
GO

除了实际上不是强制关系的 InvoiceNo 之外,两个表之间没有实际关系。

然后,当用户添加新发票时,前端执行以下操作:

public static void CreateInvoice(Invoice newInvoice)
{
    try 
    {
        using (var ctx = new DataContext) 
        {
            var lastInvoice = (from lastNumber in ctx.SingleRowTable
                                    select lastNumber).Single;

            var newInvoiceNo = lastInvoice.InvoiceNumber +1; // Int

            lastInvoice.InvoiceNumber = newInvoiceNo;

            newInvoice.InvoiceNo = newInvoiceNo;

            ctx.Invoices.InsertOnSubmit(newInvoice);

            ctx.SubmitChanges;
        }
    }
    catch  (Exception x)
    {
        // Sleep now in the fire
    }
}

因此,基本上,当创建新发票时,前端会请求 InvoiceNo(单行)表中的号码并加一 (+1) 该号码,然后成为新的发票号码以及最近使用的发票号码。

数据库中的其他表 (InvoiceItems) 引用 InvoiceId 而不是 InvoiceNo。

我想问题是:为什么有人会使用这种方法?它是反模式或设计错误还是有任何真正的实现?

我的想法是,出于某种原因,需要保留“真实世界”发票编号,因此他们决定运行额外的“唯一 ID”将是处理它的最佳方式。我想也许开发人员无法承受发票数量增加一千。(?) 也许。

database-design sql-server-2014
  • 2 个回答
  • 79 Views
Martin Hope
Nelson
Asked: 2016-09-23 04:01:11 +0800 CST

备份大小不稳定,去哪里找原因

  • 2

我有一个新的SQL Server 2014 (12.0.2000)实例,大约有 50 个数据库,它最近从 SQL Server 2005 升级而来。

他们使用了大量的备份空间,因此旧的维护计划被替换为不同的方法:

检查数据库完整性->备份数据库(完整)(带压缩) ->重建索引->维护清理

这种情况每天都会发生,而数据库没有被使用,并且它会将备份保留 5 天。

一开始它工作正常,并且保存了大量备份驱动器,但随后一些数据库开始以不稳定的文件大小进行备份。

一些显示文件大小变化的图像:

这个下降了很多,这是意料之中的。事情是,它又下降了两次(?)

另一个缩小一点,然后进一步缩小,最后比第一次压缩备份时更大。

在此处输入图像描述

最后这个尺寸变小了,第二天进一步下降,然后又上升到第一天的那个位置。

在此处输入图像描述


在这种情况下:

在此处输入图像描述

在恢复时,文件的大小增加了很多:

在此处输入图像描述

所以他们确实恢复了他们应该的方式,但我在这里想知道,为什么他们的大小不同,我完全可以理解压缩后但在(?)之后的变化。

为什么备份会以这​​种方式运行?任何已知的原因?

另外:日志中没有真正发生的事情。

backup sql-server-2014
  • 2 个回答
  • 122 Views
Martin Hope
Nelson
Asked: 2016-05-03 10:01:13 +0800 CST

运行缓慢的查询返回不完整的结果集

  • 1

所以我试图从 SQL Server 2008 实例中获取一些数据,查询的结构非常简单,但性能极差,只需不到一分钟的时间就可以检索超过 1,000,000 行(来自 SSMS)。

在这里你可以看到执行计划。

执行计划 数据用于统计目的,并且从R-Studio(通过RODBC)使用查询,当从此环境查询时,它的“中断”在 450,000 - 500,000 行附近的某处。我认为 RODBC 在接近 30 秒标记的某个地方超时......

查询

SELECT
    cc.ReportID,
    cc.ReportDate,
    cc.UnitID,
    cc.Callsign,
    cc.SpeciesCode,
    cc.ComName,
    cc.CatchWeight,
    cc.DayGrid,
    cc.NightGrid,
    cc.UnitEffortType,
    cc.UnitEffort,
    cc.Depth,
    cc.ReportType,
    cc.EffortDesc,
    cc.LicenceUsed,
    vn.ValidFrom,
    vn.Nation,
    vn.NationCode, 
    vg.GRT
FROM
    vwVesselGRT vg 
    INNER JOIN vwVesselNationality vn ON vg.UnitID = vn.UnitID
    INNER JOIN vwClientCatch cc ON vn.UnitID = cc.UnitID AND vn.ValidFrom <= cc.ReportDate AND vn.ValidTo > cc.ReportDate
WHERE
    cc.ReportDate <= '2016-04-30'

我想知道是否有人遇到过这样的问题。我应该尝试更改查询还是解决问题的 R 方面?恐怕我在这里没有发现真正的问题。

sql-server sql-server-2008
  • 1 个回答
  • 334 Views
Martin Hope
Nelson
Asked: 2015-12-30 10:52:47 +0800 CST

具有条件的唯一标识符字段

  • 8

我有一个不在生产中的数据库,所以主表是 CustodyDetails,这个表有一个ID int IDENTITY(1,1) PRIMARY KEY列,我正在寻找一种方法来添加另一个没有在任何其他表中引用的唯一标识符,我想通过接受这个帐户列的内容不会完全是身份密钥。

不过,这个新的身份列有一些具体细节,这就是我的问题开始的地方。格式如下:XX/YY其中XX是一个自动递增的值,每个新的一年都会重置/重新启动,YY是当前年份的最后 2 位数字SELECT RIGHT(YEAR(GETDATE()), 2)。

因此,例如,假设从28/12/2015结束到03/01/2016的一天添加了一条记录,该列将如下所示:

ID    ID2     DATE_ADDED
1     1/15    2015-12-28
2     2/15    2015-12-29
3     3/15    2015-12-30
4     4/15    2015-12-31
5     1/16    2016-01-01
6     2/16    2016-01-02
7     3/16    2016-01-03

我想到了用前端解析复合ID(例子中的ID2)得到最后2位,然后和当年的最后2位进行比较,然后决定是否开始新的关联。当然,如果能够在数据库端完成这一切就太好了。

编辑 1:顺便说一句,我也看到人们使用单独的表只是为了存储并行身份键,所以一个表身份键成为第二个表的辅助键,这听起来有点狡猾,但也许这种实现就是这种情况?

编辑 2:这个额外的ID 是标记每个文件/记录的遗留文档参考。我想人们可以将其视为主要 ID 的特殊别名。

这个数据库每年处理的记录数量在过去 20 年中从未超过 100 条,而且非常(真的,非常高)不可能,当然,如果超过 99 条,该领域将能够继续使用额外的数字,前端/程序将能够超过 99,所以它不像它改变了东西。

当然,其中一些细节我一开始没有提到,因为它们只会缩小解决方案的可能性以满足我的特定需求,试图使问题范围更广。

sql-server sql-server-2005
  • 1 个回答
  • 1311 Views
Martin Hope
Nelson
Asked: 2015-09-04 09:00:19 +0800 CST

使用 CURSOR 从 SELECT 插入

  • 0

我有一个看起来像这样的表:

+====================================================+
| aid  |  uid  |  eid  |  name  |    dob     | paid  |
+====================================================+
|  1   |  100  |  10   |  Mick  | 1980-03-29 |  40   |
|  2   |  101  |  11   |  Jack  | 1969-11-21 |  40   |
|  3   |  205  |  11   |  Lynn  | 1990-07-10 |  80   |
|  4   |  217  |  10   |  Dana  | 1987-02-15 |  40   |
+----------------------------------------------------+

其中aid = Temp 表标识列,uid = User 表 FK,eid = Employer 表 FK

所以这个数据需要进入另一个表,但它看起来像这样:

+====================================================+
|  id  |  uid  |  eid  |  week  |  postdate  | paid  |
+====================================================+
|  1   |  100  |  10   |    1   | 2015-09-03 |  10   |
|  2   |  100  |  10   |    2   | 2015-09-03 |  10   |
|  3   |  100  |  10   |    3   | 2015-09-03 |  10   |
|  4   |  100  |  10   |    4   | 2015-09-03 |  10   |
|  1   |  101  |  11   |    1   | 2015-09-03 |  10   |
|  2   |  101  |  11   |    2   | 2015-09-03 |  10   |
|  3   |  101  |  11   |    3   | 2015-09-03 |  10   |
|  4   |  101  |  11   |    4   | 2015-09-03 |  10   |
|  1   |  205  |  11   |    1   | 2015-09-03 |  20   |
|  2   |  205  |  11   |    2   | 2015-09-03 |  20   |
|  3   |  205  |  11   |    3   | 2015-09-03 |  20   |
|  4   |  205  |  11   |    4   | 2015-09-03 |  20   |
|  1   |  217  |  10   |    1   | 2015-09-03 |  10   |
|  2   |  217  |  10   |    2   | 2015-09-03 |  10   |
|  3   |  217  |  10   |    3   | 2015-09-03 |  10   |
|  4   |  217  |  10   |    4   | 2015-09-03 |  10   |
+----------------------------------------------------+

所以发生的事情是,我选择了一年中的一个月,然后我得到了那个月的周数(week列),并且对于我初始表中的每条记录,我将一个添加到我的第二个表中。Mick、Jack 和 Dana 支付了 40(拆分 4 [每月的几周]),Lynn 支付了 80,从而使选定月份的每周支付 20。

所以基本上我想问的是我正在寻找这种或这种使用 a 的方法CURSOR,或者是否有更具体的方法从 aSELECT为表中的每条记录插入记录(不超过 600(x4)条记录时间)。


请注意,示例仅考虑将记录从一个表“移动”或复制到另一个表,因此这里的 100 条记录变成那里的 100 条记录。我可以实施哪些选项来使用 SQL 在我的临时表中每条记录插入 4 条记录(前端代码中的循环除外)?

sql-server-2005 insert
  • 1 个回答
  • 79 Views
Martin Hope
Nelson
Asked: 2015-09-02 12:06:23 +0800 CST

将(平面文件)导入 SQL Server

  • 0

我已经看到几个关于这个主题适得其反的问题,所以我会尝试具体说明我的担忧......

我有一个旧的 (MS Access) 前端,我正在尝试重建,我把最让我烦恼的部分放在最后,所以我来了。任务是“抓取”一个文件(以前是 XLS),现在它更可能是它的副产品,为了示例而说 CSV。

所以这是我的第一个垫脚石,我很关心我的导入结果,根据 Pinal Dave BULK INSERT的说法,这是一个非原子操作:

如果任何行中有任何错误,则不会插入该行,但会插入其他行。

这对我没有吸引力,因为我倾向于不信任用户输入,我想要更多控制从而能够触发错误并且不导入文件的任何部分会更好。我不确定这是否有效地消除了BULK INSERT用于此过程的可能性?

我还尝试逐行阅读并使用LOOP循环插入,这很有效,但不幸的是,即使在优化我的代码后我也需要很长时间,我才从 15 分钟减少到 4 分钟,而这仅适用于 850 条记录。

从 Access 前端运行时,该过程运行得如此顺利,我有点生气。那是因为DoCmd.TransferSpreadsheetVBA 方法。这允许将 XLS 快速导入到临时表中,并从该临时表执行更新表。

我想知道在将数据从平面文件源导入 SQL Server 时,人们还尝试了哪些其他选项。诚然,我在这一点上有点困惑。

任何帮助,将不胜感激。

sql-server-2005 import
  • 1 个回答
  • 455 Views
Martin Hope
Nelson
Asked: 2015-08-19 15:06:12 +0800 CST

使用 WHILE 语句优化查询

  • 2

我正在尝试将每年提取金额的视图转换为更多WHILE内容

查询或多或少是:

SELECT *
FROM
(SELECT SUM(EmployeePaid)*2 AS Total2013 FROM TblRecords WHERE FYear = 2013) t1,
(SELECT SUM(EmployeePaid)*2 AS Total2014 FROM TblRecords WHERE FYear = 2014) t2,
(SELECT SUM(EmployeePaid)*2 AS Total2015 FROM TblRecords WHERE FYear = 2015) t3

所以这返回:

=====================================
‖ Total2013 ‖ Total2014 ‖ Total2015 ‖
=====================================
‖ 42983.31  ‖ 76345.10  ‖  87233.5  ‖
=====================================

例如,这对于生成图表非常好且易于使用。但正如我之前提到的,我开始研究这种查询,我相信它们可以变成更紧凑的WHILE循环。我知道旧时如果它没有坏就不要修复它所以任何输入都会被赞赏。

到目前为止,我正在围绕这些方面进行研究:

DECLARE @intYear INT
SET @intYear = 2013
WHILE (@intYear < Year(GETDATE()))
BEGIN
    SELECT SUM(EmployeePaid)*2 AS CurrYear FROM TblRecords WHERE FYear = @intYear
    SET @intYear = @intYear + 1
END

现在我一直在尝试获得与原始查询相同的输出,因为我WHILE的做法是成功的,但返回了 3 个不同查询的输出。我也无法设法CurrYear在每一轮中“获得”一个新的价值,有点像CurrYear + @intYear一种名字。

任何提示表示赞赏

sql-server-2008 optimization
  • 2 个回答
  • 66 Views
Martin Hope
Nelson
Asked: 2015-06-10 04:53:22 +0800 CST

跨不同数据库引用的重复记录

  • 1

我有一个包含“人员”数据(大约 70K 条记录)的表,它与“地址”表共存,因此AddressID“人员”表中每个人都有一个。

想法是将数据集中在这个单一的“人口”数据库中,一旦由于执行不当的导入过程(数据来自不同来源)而开始出现重复记录,问题就开始了,这使得表中有多达 7 条记录单身人士。

此外,地址表开始收集“各种”,假设我住在“ 24 Wickam Heights ”,您可以通过以下方式找到该地址:

  • 24 维卡姆
  • 威肯街 24 号
  • 威肯街 24 号
  • 24 威卡姆 H.
  • 24维卡姆海峡。

在某些情况下,同一条街道的 20 多个不同版本一样糟糕......

最美妙的部分是来自该数据库的数据被同一服务器中至少 5 个其他数据库引用,这使得每次更改都是一个非常冒险的过程。

所以我在想,可以采取什么步骤来消除重复项?有什么替代方法可以避免地址表累积如此多的数据不一致?。

甚至要问,这么大的烂摊子还有救吗?这真是一场噩梦。

sql-server-2005 database-design
  • 1 个回答
  • 211 Views
Martin Hope
Nelson
Asked: 2015-04-18 06:21:42 +0800 CST

使用图表设置关键约束

  • 0

我一直在使用 SSMS 绘制我的数据库图表,并且习惯了使用此工具创建关键约束。现在我开始思考,在阅读一本书的相关章节时,“......也许这不是一个很好的做法”

这种做法有什么缺点吗?那是在 SSMS 上使用 Diagram Designer 定义关键约束?

sql-server sql-server-2012
  • 1 个回答
  • 84 Views
Martin Hope
Nelson
Asked: 2015-04-03 05:00:26 +0800 CST

外部数据包装器和 Windows 身份验证

  • 1

我一直在尝试从 SQL Server 获取数据以在 PostgreSQL 数据库上使用它。在上一个问题之后,我开始使用FOREIGN DATA WRAPPERS,首先我尝试使用tds_fdw但在成功安装后我无法使其工作,可能是由于我在下面详述的相同问题。

在此之后,我去了Multicorn和一些更好的地方,因为那里有使用它的实际文档。

尝试从 SQL Server 添加表后,我收到以下消息:

 ERROR:  Error in python: OperationalError DETAIL:  (OperationalError)
 SQL Server message 18456, severity 14, state 1, line 1: **Login failed
 for user 'postgres'**. DB-Lib error message 18456, severity 14: General
 SQL Server error: Check messages from the SQL Server DB-Lib error
 message 20002, severity 9: Adaptive Server connection failed

所以我知道这是一个身份验证错误,SQL Server 与 Windows 身份验证一起使用,所以我的连接字符串 ( mssql+pymssql://postgres:[email protected]/ForeignDatabase) 变得无用。经过更多搜索后,我得到了这个答案:

check_mssql_server.py 插件不适用于 Windows 身份验证,需要 SQL 身份验证。

到目前为止,我不相信有人创建了可以使用 Windows 身份验证的 MSSQL 插件。

显然不是相同的场景,但它也是一个数据包装器操作,给出了极其相似的错误消息。

所以我的问题是:真的没有办法使用Windows 身份验证从 PostgreSQL 到 SQL Server 使用外部数据包装器吗?我确实postgres:postgres向 SQL Server 添加了一个新用户 ( )。

我还要补充一点,PostgreSQL 9.3 服务器位于 Ubuntu Server 14.04 上,SQL Server 2005 位于 Windows Server 2003 上。

sql-server postgresql-9.3
  • 1 个回答
  • 1485 Views
Martin Hope
Nelson
Asked: 2015-03-27 11:57:31 +0800 CST

将 SQL Server 表链接到 PostgreSQL 服务器

  • 2

我有一个 SQL Server 2005 实例和一个在同一网络上运行的PostgreSQL 9.3,我想知道是否有可能以某种方式在 PostgreSQL 服务器中的数据库上创建或拥有显示来自 SQL Server 的数据的“视图”。

sql-server-2005 ssms
  • 1 个回答
  • 733 Views
Martin Hope
Nelson
Asked: 2015-03-23 10:36:32 +0800 CST

从 WHERE 子句的字符串中排除特定单词

  • 3

我有一个存储发票的表,我正在尝试从中获取统计信息,不幸的是,该表的构建很差,并且一些关键信息都混杂在 nvarchar 字段中,例如发票是否已被取消或部分信息费用的一部分是豁免的,该字段以非常花哨的字符串形式驻留在该字段中,该字符串由前端解析。3453.234;exempt;Invoice Total...

所以我想创建一个排除几个单词的查询。我的问题是如何完成一个查询,该查询可以根据关键字列表(取消、豁免)排除记录,因此如果该字段中有任何单词,则不会考虑金额。

sql-server t-sql
  • 3 个回答
  • 20652 Views
Martin Hope
Nelson
Asked: 2015-03-10 05:11:46 +0800 CST

在 CHAR 类型字段上的日期之间搜索

  • 0

我有一个表,其中有一个存储日期的字段,问题是字段类型是CHAR(10),我被要求查询某些日期之间的数据。

我不想更改字段类型,因为我不确定这将如何影响前端应用程序。

有没有一种方法可以在不更改数据类型的情况下查询日期之间的结果?

问候。

sql-server
  • 1 个回答
  • 635 Views
Martin Hope
Nelson
Asked: 2015-02-26 05:24:37 +0800 CST

SSMS 2014 与 SQL Server 2005 实例一起使用

  • 1

将最新(开发人员)版本的 SSMS 与较旧的 SQL Server 2005 实例一起使用时,是否会遇到任何重大并发症?

任何方式都可以通过使用此版本来影响数据?

sql-server sql-server-2005
  • 3 个回答
  • 1982 Views
Martin Hope
Nelson
Asked: 2015-02-24 05:54:11 +0800 CST

如何使用 BLOB 字段减小数据库大小

  • 1

我有一个用于存储指纹的数据库。在我的概念下,这应该是一个小型数据库,但问题是最初的开发人员可能会绊倒 peyote,并决定将指纹存储在 BLOB 字段中是一个好主意。

由于这个神奇的技巧,数据库现在大小为 3 GB,并且前端一直在崩溃,难怪一个简单的 SELECT TOP(1000) 从 MSSMS 需要大约一分钟。

所以我对如何进行有疑问。有没有办法可以减小包含图片的表格的大小?或者也许是这种疯狂的另一种选择。

问候。

sql-server blob
  • 2 个回答
  • 2366 Views
Martin Hope
Nelson
Asked: 2015-01-27 04:15:23 +0800 CST

分组 UNION ALL

  • 0

无论我如何尝试对该查询生成的记录集进行分组,它都不会这样做。查询正常,问题是尝试按 A 分组

SELECT     CountryCode + + ProductNumber + + StockType AS A, 
           Quantity AS B, 
           Description AS C, 
           Price AS D

FROM       dbo.vwSalesInvoiceWHandling
UNION ALL
SELECT     CountryCode + + ProductNumber + + StockType AS A,  
           Quantity AS B, 
           Description AS C, 
           Price AS D

FROM       dbo.vwSalesInvoiceWOHandling
sql-server union
  • 1 个回答
  • 29289 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve