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-111810

HeyJude's questions

Martin Hope
HeyJude
Asked: 2023-08-29 17:35:20 +0800 CST

检查另一个数据库中是否存在索引

  • 5

有没有办法检查另一个数据库中是否存在索引?

AFAIK,通常的方法(sys.indexes和)仅在当前INDEXPROPERTY数据库的上下文中运行。

sql-server
  • 1 个回答
  • 38 Views
Martin Hope
HeyJude
Asked: 2023-01-20 00:40:32 +0800 CST

为什么 SQL Server 作业失败并显示“EXECUTE AS LOGIN failed for the requested login”?

  • 5

我创建了一个 SQL Server 作业,其中:

  • 我的用户被设置为owner工作的
  • 在任何步骤都没有指定用户run as。

作业因错误而失败:

请求的登录“EXECUTE AS LOGIN”失败 <my_username_here>

当我将owner工作的权限更改为另一个具有更多权限的用户时,工作就成功了。

因此,该作业似乎在用户集下运行owner- 但我在这里(1、2)或在 SO 中阅读了几个问题,讨论“谁是运行该作业的用户”,但没有人提到这一点。

所以我想知道我的情况发生了什么?

sql-server
  • 1 个回答
  • 39 Views
Martin Hope
HeyJude
Asked: 2022-10-21 01:16:29 +0800 CST

修复在没有 N 前缀的情况下插入的损坏的 utf8 nvarchar 值

  • 9

是否可以从没有N前缀的损坏的 nvarchar 中恢复 UTF8 数据?

例如,在以下代码段中,我希望@n1_fixed基于以下内容获得正确的值@n1:

declare
  @n1 nvarchar(10) = 'Ḿấxiḿứś',
  @n2 nvarchar(10) = N'Ḿấxiḿứś';

declare
  @n1_fixed nvarchar(10); -- somehow make it have the correct value, based on @n1

select iif(@n1_fixed = @n2, 1, 0)
sql-server
  • 1 个回答
  • 455 Views
Martin Hope
HeyJude
Asked: 2022-05-11 23:30:41 +0800 CST

计算有多少变量等于目标值

  • 0

有没有一种聪明的方法来计算有多少变量等于某个目标值(在 SQL Server 中)?

例如,如果我有:

declare @a int = 1;
declare @b int = 2;
declare @c int = 1;
declare @target int = 1;

然后我想做多少个@a, @b, @ceqauls @target。

在命令式语言中,很容易创建一个内联变量数组,然后计算它们——例如在 JS 中:

var a = 1, b = 2, c = 2, target = 1;
if ([a, b, c].filter(item => item == target).length == 1)
   // do something 

该“内联数组”在 SQL 中的等价物将是一个单列表,但这需要 using DECLARE TABLE,我想避免这种情况。

在 SQL 中是否有类似的简单方法来进行此类计数?

请注意,我对“在不声明的情况下创建表”不太感兴趣——我真正关心的是根据目标变量计算变量,所以如果可以在完全不使用表的情况下完成,那就更好了。

sql-server count
  • 1 个回答
  • 74 Views
Martin Hope
HeyJude
Asked: 2022-02-15 14:07:10 +0800 CST

MERGE 与 MERGE INTO 有什么区别?

  • 2

MERGE 与 MERGE INTO 有什么区别?
每个的用例是什么?

令人惊讶的是,我找不到任何关于这种差异的现有问题。

MERGE的文档也没有解释这一点,而且它只在一个似乎与该差异无关的情况下使用一次(如果有的话)。

sql-server merge
  • 1 个回答
  • 539 Views
Martin Hope
HeyJude
Asked: 2022-01-20 00:57:18 +0800 CST

按字段过滤,如果结果为零,则按其他字段过滤

  • 0

应如何WHERE构造子句,例如:

  • 它按某个字段过滤
  • 如果按上述字段过滤的结果为零,那么它会按另一个字段过滤吗?

例如,如果我们有这个模式:

CREATE TABLE Items
(
  [Id] INT PRIMARY KEY,
  [FirstDate] DATETIME,
  [SecondDate] DATETIME
);

...有这些记录:

INSERT INTO Items ([Id], [FirstDate], [SecondDate])
VALUES 
(1, '2021-1-1', '2022-1-1'),
(2, '2022-1-1', '2023-1-1'), 
(3, '2022-1-1', '2024-1-1'), 
(4, '2024-1-1', '2025-1-1'),
(5, '2024-1-1', '2026-6-1')

...然后我想过滤FirstDateand SecondDate,这样:

  • 如果我们指定FirstDateandSecondDate来过滤2022-1-1,将返回记录 2 和 3(但不是 1!)。
  • 如果我们指定FirstDateandSecondDate来过滤2024-1-1,将返回记录 4 和 5(但不是 3!)。
  • 如果我们指定FirstDateandSecondDate来过滤2025-1-1,将返回记录 4。
sql-server where
  • 2 个回答
  • 69 Views
Martin Hope
HeyJude
Asked: 2021-12-24 12:07:33 +0800 CST

了解为什么在使用子查询过滤器时让每个父行与其最新的子行加入不起作用

  • 0

我有一个父子表关系,我试图让每个父行及其最新的子行详细信息。

我尝试使用子查询来做到这一点没有奏效,我只能使用 CTE 来做到这一点。

我想了解:

  1. 为什么子查询方式不起作用?
  2. 有没有办法解决它?

这是父子关系的玩具示例(完整演示在这里):

CREATE TABLE Cities
    (
        [Id] INT PRIMARY KEY,
        [Name] NVARCHAR(100),
        [EstablishedDate] DATETIME2 NULL,
    );
    
CREATE TABLE Parks
    (
        [Id] INT PRIMARY KEY,
        [Name] NVARCHAR(100),
        [OpeningDate] DATETIME2 NULL,
        [CityId] INT FOREIGN KEY REFERENCES Cities(Id)
    );

使用 CTE 成功查询:

;WITH NumberedParks AS
(
  SELECT *, ROW_NUMBER() OVER (PARTITiON BY CityId ORDER BY OpeningDate DESC) AS rownum
  FROM Parks
)
SELECT * 
FROM Cities
JOIN NumberedParks on Cities.Id = NumberedParks.CityId
WHERE rownum = 1;

失败的尝试:

SELECT * 
FROM Cities
JOIN Parks on Cities.Id = Parks.CityId
WHERE EXISTS
(
  SELECT TOP 1 Id
  FROM Parks inner_parks
  WHERE inner_parks.Id = Parks.Id
  ORDER BY inner_parks.OpeningDate DESC
)

SELECT * 
FROM Cities
JOIN Parks on Cities.Id = Parks.CityId
WHERE Parks.Id =
(
  SELECT TOP 1 Id
  FROM Parks inner_parks
  WHERE inner_parks.Id = Parks.Id
  ORDER BY inner_parks.OpeningDate DESC
);
sql-server join
  • 1 个回答
  • 150 Views
Martin Hope
HeyJude
Asked: 2021-12-20 02:40:02 +0800 CST

按零排序如何工作

  • 2

在以下脚本中(请参阅此处的完整演示):

SELECT *
FROM Table1
ORDER BY 
   CASE WHEN Field1 IS NOT NULL 
     THEN 0 
   END
  • 的类型是0什么?
  • 是如何0解释的?不是选择列表中列的序号,因为选择列表枚举是从 1 开始的,而不是 0。那么它是什么?

为了详细说明,将上面的代码段与以下代码段进行比较,它会发出错误:

SELECT *
FROM Table1
ORDER BY 0  

ORDER BY 位置编号 0 超出了选择列表中的项目数范围。

并将其与以下代码段进行比较,该代码段会发出另一个错误:

SELECT *
FROM Table1
ORDER BY '0'

在 ORDER BY 列表的位置 1 中遇到常量表达式。

似乎将0值嵌套在case子句下使它起作用,但我不明白为什么以及如何?

  • 这个问题在某种程度上是这个旧问题的后续问题,与我上面列出的替代方案相比,它没有解释为什么它可以工作: 如何使用 order by 0 工作 SQL?
sql-server order-by
  • 3 个回答
  • 1155 Views
Martin Hope
HeyJude
Asked: 2021-11-15 06:45:03 +0800 CST

查询以仅过滤具有不同值的分组

  • 1

我需要一个简单的查询,但找不到方法:

我有一张客户购买的服务表,其中不同的客户可能会购买相同的服务(很简单),每个客户可能有几个活跃或不活跃的服务:

ServiceId  IsActive ServiceCustomerId
815        0        111
715        0        111
985        1        222
815        1        333
475        1        111
985        1        111
815        1        222

我想获取同时拥有活动和非活动服务的客户的记录,因此输出将是(ServiceId可以省略):

IsActive ServiceCustomerId
0        111
1        111

我所拥有的是:

select ServiceCustomerId,IsActive from Services 
group by ServiceCustomerId, IsActive
having count(IsActive) > 1
order by ServiceCustomerId

这使:

IsActive ServiceCustomerId
0        111
1        111
1        222

演示可以在这里看到。

如何仅过滤同时具有这两个IsActive组的人?

sql-server group-by
  • 1 个回答
  • 88 Views
Martin Hope
HeyJude
Asked: 2021-08-02 00:47:45 +0800 CST

如何构造将 TOP 1 记录转换为 json 对象(而不是 json 数组)的 FOR JSON

  • 1

我想将 aJSON_QUERY与SELECT TOP 1查询一起使用,以便生成的 json 以对象形式而不是表形式具有前 1 条记录?

例如,以下查询(现场演示):

CREATE TABLE Trees
(
    [Id] INT,
    [Type] NVARCHAR(100),
    [Height] DECIMAL(2,1)
);


INSERT INTO Trees ([Id], [Type], [Height])
VALUES 
(1, 'Palm', 5.5), 
(2, 'Pine', 6.2), 
(3, 'Apple', 2.5), 
(4, 'Japanese Cedar', 0.5), 
(5, 'Spanish Fir', 0.6);


SELECT
  highestTree = JSON_QUERY(
      (
         SELECT TOP 1
         Id as id,
         Type as type,
         Height as height
         FROM Trees 
         WHERE Height = (SELECT Max(Height) FROM Trees)
         FOR JSON PATH
      )
  ),
  lowestTree  = JSON_QUERY(
      (
         SELECT TOP 1
         Id as id,
         Type as type,
         Height as height
         FROM Trees 
         WHERE Height = (SELECT MIN(Height) FROM Trees)
         FOR JSON PATH
      )
 )
FOR JSON
  PATH, WITHOUT_ARRAY_WRAPPER
;

输出:

{"highestTree":[{"id":2,"type":"Pine","height":6.2}],"lowestTree":[{"id":4,"type":"Japanese Cedar","height":0.5}]}

但我想要:

{"highestTree":{"id":2,"type":"Pine","height":6.2},"lowestTree":{"id":4,"type":"Japanese Cedar","height":0.5}}
sql-server json
  • 1 个回答
  • 279 Views
Martin Hope
HeyJude
Asked: 2021-07-29 23:28:42 +0800 CST

将 FOR JSON 结果插入表列

  • 0

我有一个FOR JSON表达式的结果,我想将它插入到一个表格列中。

我怎么做?

这是我的一次不成功的试验(请注意,该SELECT hightrees ... FOR JSON PATH部分是正确的,可以在我的另一个问题的答案中看到,这也是现场演示),它给出了错误Invalid object name 'TreesJson':

SELECT * FROM (
  SELECT
  highTrees = JSON_QUERY(
                (
                  SELECT 
                  Id as id,
                  Type as type,
                  Height as height
                  FROM Trees WHERE [Height] > 5
                  FOR JSON PATH
                )
              ),

  lowTrees  = JSON_QUERY(
                (
                  SELECT 
                  Id as id,
                  Type as type,
                  Height as height
                  FROM Trees WHERE [Height] < 1
                  FOR JSON PATH
                )
              )
  FOR JSON
    PATH, WITHOUT_ARRAY_WRAPPER
) AS TreesJson;

INSERT INTO TreesGrowthLog ([Day], [TreesGrowth])
    VALUES (CAST(GETDATE() AS Date, (SELECT * FROM TreesJson FOR JSON AUTO))
sql-server insert
  • 1 个回答
  • 804 Views
Martin Hope
HeyJude
Asked: 2021-07-29 11:26:36 +0800 CST

当join不相关时,基于同一张表上的多个查询创建一个json

  • 1

我需要根据同一张表上两个不同查询的结果构造一个 json,其中连接是无关紧要的。

考虑以下示例(此处为完整演示):

CREATE TABLE Trees
(
    [Id] INT,
    [Type] NVARCHAR(100),
    [Height] DECIMAL(2,1)
);

INSERT INTO Trees ([Id], [Type], [Height])
VALUES 
 (1, 'Palm', 5.5), 
 (2, 'Pine', 6.2), 
 (3, 'Apple', 2.5), 
 (4, 'Japanese Cedar', 0.5), 
 (5, 'Spanish Fir', 0.6);

我想构建以下json:

{
  "highTrees": 
  [
     {
        "id": 1,
        "type": "Palm",
        "height": 5.5
     },
     {
       "id": 1,
        "type": "Pine",
        "height": 6.2
     }
  ],
  "lowTrees": 
  [
     {
        "id": 4,
        "type": "Japanese Cedar",
        "height": 0.5
     },
     {
       "id": 5,
        "type": "Spanish Fir",
        "height": 0.6
     }
  ]
}
  

我试过这个:

SELECT 
   Id as 'highTrees.id',
   Type as 'highTrees.type',
   Height as 'highTrees.height'
FROM Trees WHERE [Height] > 5
UNION ALL
SELECT 
   Id as 'lowTrees.id',
   Type as 'lowTrees.type',
   Height as 'lowTrees.height'
FROM Trees WHERE [Height] < 1
FOR JSON PATH;

但显然这不是要走的路,因为它给出了这个:

[
  {
    "highTrees": {
      "id": 1,
      "type": "Palm",
      "height": 5.5
    }
  },
  {
    "highTrees": {
      "id": 2,
      "type": "Pine",
      "height": 6.2
    }
  },
  {
    "highTrees": {
      "id": 4,
      "type": "Japanese Cedar",
      "height": 0.5
    }
  },
  {
    "highTrees": {
      "id": 5,
      "type": "Spanish Fir",
      "height": 0.6
    }
  }
]

我怎样才能达到预期的效果?

sql-server json
  • 1 个回答
  • 405 Views
Martin Hope
HeyJude
Asked: 2021-07-19 04:58:26 +0800 CST

使用新的 json 值更新 nvarchar 列,而不在新值中添加引号

  • 1

我有下表,其中[Data]是类型nvarchar(max),它的值是有效的 json 字符串:

ID 数据
1 { "info" : { "done": true, "chosenOptions": ["one", "two"] } }
2 { "info" : { "done": true, "chosenOptions": ["one"] } }
3 { "info" : { "done": true, "chosenOptions": [] } }
4 { "info" : { "done": true } }

我想更新所有Data不包含chosenOptions或 where chosenOptionsis 的行[]。

  • 假设每个Datajson 值都有几个其他属性,而不是此处显示的属性,如果这很重要的话。

我的查询:

declare @defaultValue Nvarchar(100);
set @defaultValue = JSON_QUERY('["one", "two"]')    

update myTable
set [Data] = JSON_QUERY(JSON_MODIFY([Data], '$.info.chosenOptions', @defaultValue))
where JSON_QUERY([data], '$.info.chosenOptions') IS NULL or 
      JSON_QUERY([data], '$.info.chosenOptions') = '[]'

结果chosenOptions值是字符串而不是数组(请忽略数组值的转义,这在这里不太重要):

ID 数据
1 { "info" : { "done": true, "chosenOptions": ["one", "two"] } }
2 { "info" : { "done": true, "chosenOptions": ["one"] } }
3 { "info" : { "done": true, "chosenOptions": "[\"one\", \"two\"]" } }<-- 注意它是一个字符串,而不是数组
4 { "info" : { "done": true, "chosenOptions": "[\"one\", \"two\"]" } }<-- 注意它是一个字符串,而不是数组

我认为这是一种预期的行为,但是如何正确更新该数组?

sql-server json
  • 1 个回答
  • 510 Views
Martin Hope
HeyJude
Asked: 2021-06-11 13:15:30 +0800 CST

嵌套循环连接运算符与标量有什么关系?

  • 2

据我了解文档,嵌套循环运算符是一个连接运算符,即它需要两个表作为输入。

如果这是正确的,那么为什么嵌套循环运算符与标量输入一起使用?

例如,采用以下查询(来自 Paul White 的网站)及其执行计划。您可以看到嵌套循环运算符的输入是 (1) 标量和 (2) 表(索引查找的结果)。

我知道标量不能与表连接,那么这实际上意味着什么?究竟加入了什么?

USE AdventureWorks2019;
DECLARE @Like nvarchar(50) = N'D%';
SELECT p.[Name]
FROM   Production.Product AS p
WHERE  p.[Name] LIKE @Like;

在此处输入图像描述

顺便说一句,我认为这是一个非常基本的问题,但我找不到一个很好的资源来从方法上讲这些基础知识,所以非常感谢推荐。

sql-server execution-plan
  • 2 个回答
  • 134 Views
Martin Hope
HeyJude
Asked: 2021-06-04 14:12:37 +0800 CST

了解表假脱机和相关子查询之间的关系

  • 3

我正在学习执行计划,并且对表假脱机和相关子查询之间的关系有疑问(我正在关注本教程,不要介意拼写错误)。

我创建了下表:

CREATE TABLE student (
  ID INT IDENTITY(1, 1),
  CX_Name VARCHAR(50),
  CX_PhoneNum VARCHAR(50),
  CX_Address VARCHAR(MAX),
  CX_Credit INT
)

然后插入值:

INSERT INTO student
VALUES (
  'Alen',
  '9625788954',
  'London',
  500
) 
GO 100
 
INSERT INTO student
VALUES (
  'Frank',
  '962445785',
  'Germany',
  1400
)
GO 100

然后执行以下查询,其中包括一个相关的子查询:

SELECT ID, CX_Name, CX_Credit
FROM student CX1 
WHERE CX_Credit >= (
    SELECT AVG(CX_Credit)
    FROM student CX2
    WHERE CX1.ID = CX2.ID
)

执行计划是:

在此处输入图像描述

本教程解释(粗体是我的):

SQL Server Engine 先从表中读取数据,对数据进行排序,然后再将其划分为段,然后创建一个临时表来存储数据组。

在解释计划的另一部分,SQL Server 引擎从 Table Spool 中读取数据,然后使用 Stream Aggregate 运算符计算每个组的平均信用值。

最后一个 Table Spool 操作员将读取分组数据并将其连接以检索高于平均值的值。

三个 Table Spool 操作员将使用第一次创建的同一个临时表。

我不明白加粗的句子,有两种方式:

  1. 必须为每个学生记录重新执行相关子查询。那么分组在这里有什么作用呢?
  2. 一个组以什么方式“存储”在表线轴内?
sql-server execution-plan
  • 1 个回答
  • 167 Views
Martin Hope
HeyJude
Asked: 2020-10-23 07:11:48 +0800 CST

为什么删除的索引仍然存在,它会阻止表被更改吗?

  • 5

我有一列(名为RequestDate),我需要将其从 更改NULL为NOT NULL,但该列上有一个聚集索引,因此我首先需要删除该索引。

最初,索引是使用以下方法创建的:

CREATE CLUSTERED INDEX IX_RequestDate   
    ON [MyDB].[dbo].[MyTable] (RequestDate); 

为了放弃它,我执行了:

Drop Index IX_RequestDate On [MyDB].[dbo].[MyTable]

然后尝试使用以下方法更改列无效性:

ALTER TABLE [MyDB].[dbo].[MyTable] ALTER COLUMN [RequestDate] DATETIME NOT NULL

但出现错误:

对象“MyTable”依赖于列“RequestDate”。

MyTable然后我使用这个查询列出了 的索引,并且索引仍然存在,尽管现在它没有名称并且它的类型是HEAP(最初CLUSTERED):

TableName   IndexName   IndexType   ColumnOrdinal   ColumnName     ColumnType
MyTable        NULL       HEAP         0            RequestDate     datetime

我有两个问题:

  1. 为什么删除的索引仍然存在?
  2. 由于这个仍然存在的索引,我是否得到了上面的依赖错误?
    如果是这样,我该如何删除它?
    如果没有,还有什么我应该检查的吗?我想避免丢桌子。

请注意,此表没有任何限制。

我正在使用 SQL Server 2014、OS Windows Server 2012 R2,以下是SCRIPT TABLE AS -> CREATE TO(我更改了一些列名)的输出:

CREATE TABLE [dbo].[MyTable](
    [RequestDate] [datetime] NULL,
    [UserName] [nvarchar](50) NULL,
    [HostName] [nvarchar](20) NULL,
    [RequestContent] [ntext] NULL,
    [ResponseContent] [ntext] NULL,
    [RequestStatus] [int] NULL,
    [ErrorMessage] [ntext] NULL,
    [Duration] [float] NULL,
    [ServiceName] [nvarchar](100) NULL,
    [Direction] [int] NULL,
    [RequestId] [uniqueidentifier] NOT NULL,
    [IsRetry] [bit] NULL,
    [CallerId] [nvarchar](100) NULL
)
sql-server index
  • 1 个回答
  • 330 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