小编Han*_*non的帖子

SQL 正在生成 CROSS JOIN 但我想要 INNER JOIN(记录成倍增加)

  SELECT *
  FROM        GRNHISTORY GR
  inner Join Inventorytransferlog itl on GR.ReferenceEntryID=itl.ReferenceEntryID
Run Code Online (Sandbox Code Playgroud)

GRNHISTORYInventorytransferlog两个表都有自己的 ID 列和唯一 ID。但是我们不需要它,也没有使用它。 ReferenceEntryIDforeign key从其他表。两个表都有 10 条记录。现在,当我运行此查询时,它向我显示了 100 条我似乎无法理解的记录。根据我的理解,它应该显示 10 条记录。请纠正我的错误。

join sql-server

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

添加聚集索引,我是否应该删除非聚集索引

我正在将聚集索引作为在线操作添加到具有 30 亿行的表中。到目前为止,它已经花费了 17 多个小时。如果我在另一个具有同样多行的表上再次执行此操作,我应该首先删除非聚集索引吗?

sql-server sql-server-2014

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

频繁查询表或单独表中的LOB

我在 Microsoft SQL Server 2012 服务器中有一个名为 FinTrans 的表,在任何给定时间都有大约 10K-30K 条记录,每天插入和删除大约 2K 条记录。

该表有 3nvarchar(max)列,用于保存事务的可能错误消息(3 种不同类型的消息,因此是单独的列)。每当列出表的内容时,nvarchar(max)也会读取这些列。列是nvarchar(max)因为它们的内容可能会超过 4K,但是机会很小(也许每周有一个记录)。

在这种情况下,最好将此列存储在与 FinTrans 表具有 1:1 关系的单独表中,还是我应该将列留在原处?

sql-server sql-server-2012 blob relations

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

在标量函数中为变量赋值的逻辑

我目前正在更新旧的标量值函数,希望能够提高它们的效率或将它们更改为内联 TVF。

在对我的重写进行故障排除时,我在原始代码中遇到了一些奇怪的问题,根据我对 SQL 中变量的理解,这似乎没有意义

如果我要写

 Declare @var as Integer
 Select @var = col1 from table
Run Code Online (Sandbox Code Playgroud)

然后这将始终返回 col1 中的最后一项。但是,在我正在使用的功能中,情况似乎并非如此。最初,有一个 where 子句根据输入更改结果,但是,删除它后,上述属性应该保持不变。在大多数情况下,确实如此,但也有一些情况并非如此。

大纲大致类似于以下内容:

create function f (
@var1 ... )
returns datatype
begin
    Declare @temp1 ... (several vars declared here)
    select @temp1 = col1, @temp2 = col2, ..., @tempX = max(colX) from(
        select col1, col2, ... ,
        colX * (case when name = 'X' then 1 else 0)
        from table1 
        INNER JOIN table2 on ...
        inner join table3 on ...
        left …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization subquery functions

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

如何处理每秒约 1k 次插入

假设每秒有大约 1k 个请求需要插入。

现在,互联网上对此有很多答案……但在这种特定情况下,它们在技术上是错误的。是的,几乎任何 RDBMS 都可以在标准硬件上每秒处理 1k 次插入,但如果且仅当您放弃 ACID 保证时。令人惊讶的是,互联网上有多少可怕的答案。例如“您可以随时扩展 CPU 和 RAM”,这应该可以每秒提供更多插入次数,但这不是它的工作原理。限制因素是磁盘速度或更精确:您实际上可以将多少事务刷新/同步到磁盘。这是棘手的一点。

在体面的“商品硬件”上(除非您投资于高性能 SSD),这就是您可以期待的:

  • SQLite:30 次插入/秒
  • MySQL:80 次插入/秒

这是您可以在保持 ACID 保证的同时插入的速率。这实质上意味着,如果您有一个每秒 100 个帖子的论坛……您无法通过这样的设置来处理它。

读取请求不是问题。您每秒可以有数千个读取请求,但写入请求通常小于每秒 100 个。

因此,这个问题专门针对如何在保持 ACID 保证的同时处理每秒 1k 次插入 - 假设单个节点每秒可以处理大约 80 个事务。

我可以看到这种工作的一种方法是,如果您在应用程序逻辑中的某处缓冲插入并将它们作为更大的事务提交到数据库(同时让客户端等待事务结束),如果您只需要单个插入,这应该可以正常工作,尽管它很复杂应用逻辑相当多。

performance transaction acid

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

将两个现有列中的值添加到新列中以获得总计

我们的数据库中有两个名为“ClientIncome”和“PartnerIncome”的现有列。我们想添加一个名为“HouseholdIncome”的新列

我们想将“ClientIncome”和“PartnerIncome”中的值添加到新的“HouseholdIncome”列中?

这是我们数据库的一个小例子。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Incomes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientIncome] [float] NOT NULL,
    [PartnerIncome] [float] NULL,
    [HouseholdIncome] [float] NULL
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[Incomes] ON 

GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (1, 130.77, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (2, 294.82, 339.28, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) VALUES (3, 0, NULL, NULL)
GO
INSERT [dbo].[Incomes] ([Id], [ClientIncome], [PartnerIncome], [HouseholdIncome]) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

如何将一个值连接到通过 sql 查询检索到的数组?

我有一个名为“mkvtable”的表,它在各个字符串和字符串数组之间建立对应关系:

  词| MKV字
------+-----------------
 你好 | {世界,朋友}
 再见| {家,永远}
 你好| {伙计们,女士们}

根据PostgreSQL 提供的文档,将值附加到值数组应该是使用连接运算符“||”的简单问题。

但是,如果我尝试将字符串 , 添加到与单词 对应的there字符串数组中,则似乎不会发生任何情况:{fellas,ladies}hi

SELECT mkvword FROM mkvtable WHERE word = 'hi' || 'there';
Run Code Online (Sandbox Code Playgroud)

PostgresSQL 似乎也说了同样的话:

 mkvword
---------
(0 rows)
Run Code Online (Sandbox Code Playgroud)

由于没有抛出任何错误,我认为语法上没有问题。

我究竟做错了什么?我最好的猜测是 psql 感到不安,因为我试图通过使用数组与相邻列中的值的关系来访问数组,但这只是一个未经教育的猜测。也许这种查询与连接运算符不太适合?

TL;DR:如何正确地将值连接到表行中存储的数组?

postgresql array string-manipulation

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

为什么此查询会抛出“无效的列名”错误?

尝试运行一个简单的 UPDATE 查询,如下所示:

UPDATE [TILL].[dbo].[appParameters] 
SET [TILL].[dbo].[appParameters].[ParameterValue] = "1" 
WHERE [TILL].[dbo].[appParameters].[ParameterName] = "StaffTablesRefreshed"
Run Code Online (Sandbox Code Playgroud)

如果该字段[ParameterName]是值"StaffTablesRefreshed",则将 的值设置[ParameterValue]"1"

执行时,SQL Server 抛出错误:

列名“StaffTablesRefreshed”无效

两者都是[ParameterName]和。[ParameterValue]nvarchar(255)

我在这里遗漏了一些明显的东西吗?

谢谢,肯

sql-server query

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

SQL Server 修补后的故障转移时间

  • 我们有两个节点 Windows Server 集群,每个节点上安装了 SQL Server(2019 标准版)集群实例
  • 有 500 个活动数据库
  • 没有配置任何可用性组或任何其他 HA 解决方案
  • 所有数据库均处于简单恢复模式
  • VLF 数量和尺寸都不是很大
  • 两个节点都是虚拟化的 Windows Server 2019,具有 64 GB 内存和 16 核。

修补被动节点并重新启动后,我们尝试故障转移到该节点。但令人惊讶的是,启动 SQL Server 服务大约需要 10 分钟,该服务挂起在更改挂起状态。在不打补丁的常规情况下,大约需要 10 秒。我从微软文档中得知,停机时间取决于故障转移时间和数据库升级脚本执行的总时间:

这一过程导致整个故障转移集群升级期间的停机时间仅限于一次故障转移时间和数据库升级脚本执行时间。

在我看来,这个停机时间似乎很长,只是在寻找以某种方式减少它的方法。如果您有任何建议,我将非常乐意倾听。

sql-server clustering failover sql-server-2019 failover-cluster-instance

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

java.sql.SQLException:用户“sa”登录失败

我无法通过 jTDS 连接连接到我的 Microsoft SQL Server 数据库:

Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433
    /MnA;instance=SQLEXPRESS", "sa","");
Run Code Online (Sandbox Code Playgroud)

SQL Server 已启用,TCP/IP 已启用,混合服务器身份验证已启用。

有任何想法吗?

java.sql.SQLException: Login failed for user 'sa'.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:345)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at DB.dbConnect(testConnection.java:17)
    at testConnection.main(testConnection.java:7)
Run Code Online (Sandbox Code Playgroud)

sql-server jdbc java

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