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

SQLDoug's questions

Martin Hope
SQLDoug
Asked: 2020-06-27 06:16:37 +0800 CST

是什么导致 BETWEEN 被 <= 和 >= 替换?

  • 0

我们的 SQL Server 2019 数据库有一个 Visual Studio 解决方案,它存储在一个 git 存储库中。一个表有几个使用 BETWEEN 运算符的检查约束,如下所示。

CONSTRAINT chk_FileTbl_MonthlyDate CHECK (MonthlyDate BETWEEN 1 AND 31)

当我使用 Redgate SQL Compare 14 将 repo 与数据库进行比较时,它显示了使用小于和大于运算符重新格式化的约束,如下所示。

CONSTRAINT chk_FileTbl_MonthlyDate CHECK (MonthlyDate >= 1 AND MonthlyDate <= 31)

我认为这是 Redgate 软件中的错误/功能,并提交了我正在等待回复的票证。但是,我的同事随后使用了 Visual Studio 2019 中的比较工具,它做了同样的事情。如果我们查看定义表的文件,它使用 BETWEEN,但两个比较工具都显示并部署了一个具有小于/大于格式的更改脚本。

是什么导致了这种行为?我们最近搬到了 SQL Server 2019,它是某种内置优化吗?

sql-server-2019 sqlcompare
  • 1 个回答
  • 23 Views
Martin Hope
SQLDoug
Asked: 2019-09-13 09:16:29 +0800 CST

为什么我的自动恢复过程没有在我期望的时候删除数据库?

  • 1

我编写了一个存储过程,在游标中遍历我的数据库,恢复最近的备份,运行 checkdb,删除恢复的数据库,然后继续下一个。我发现在此过程中,在任何给定时间都会恢复几个数据库,这会占用太多磁盘空间,无法在我的大型数据库上运行。该过程完成后,所有数据库都将被删除,并且不会留下任何东西。我已经检查并仔细检查了我在光标内有删除数据库的步骤,但这没有帮助。

我在光标中有这段代码:

SET @DropCommand = 'IF DB_ID(''' + @CursorRestoreName + ''') IS NOT NULL
BEGIN
    ALTER DATABASE [' + @CursorRestoreName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [' + @CursorRestoreName + '];
END';

EXEC sp_executesql @DropCommand

我还添加了一条PRINT @DropCommand语句来验证此代码块是否正在执行,并且确实如此。

由于这不起作用,我在第一个游标中添加了另一个游标,以浏览完整的数据库列表以尝试使用 drop 命令,以清理以前的恢复。这仍然具有相同的效果:在此过程中,在给定时间服务器上存在多个数据库还原,然后所有数据库都已被删除。

您是否有任何建议我可以实施,以便在继续下一次还原之前实际删除还原的数据库?或者也许有解决此问题的建议?

sql-server t-sql
  • 2 个回答
  • 110 Views
Martin Hope
SQLDoug
Asked: 2019-02-28 12:44:24 +0800 CST

是否有 Azure SQL DB 的 Express 版本?

  • 3

对于本地 SQL Server,有 Express、Web、Standard 和 Enterprise 等版本。Azure SQL DB 中是否存在这些版本(或类似版本),尤其是 Express?

我的 Google-Fu 在这里失败了,可能是因为它不存在。

sql-server azure-sql-database
  • 1 个回答
  • 2933 Views
Martin Hope
SQLDoug
Asked: 2018-05-02 10:42:43 +0800 CST

在 Azure SQL DB 中查询 JSON 以获得每行一个数组元素

  • 1

我在 SQL Azure 数据库实例中有一个存储过程,输入参数是一个格式如下的 JSON 字符串:

{
    "OrderNumber":["OD12034"],
    "Site":["New York"],
    "LineNumber":[1000,2000],
    "ItemNumber":["BX12345","BX12349"],
    "Quantity":[23,15]
}

我想对此进行解析,以便可以将记录插入到这样的表中:

ArrayKey    | ArrayElement
------------|-----------
OrderNumber | OD12034
Site        | New York
LineNumber  | 1000
LineNumber  | 2000
ItemNumber  | BX12345
ItemNumber  | BX12349
Quantity    | 23
Quantity    | 15

到目前为止,我已经能够从 JSON 中获取数据,但不是我想要的格式。这是一个简单的例子。

SELECT * FROM OPENJSON(@JsonParameter)

key              |value                      |type
-----------------|---------------------------|----
OrderNumber      |["OD12034"]                |4
Site             |["New York"]               |4
LineNumber       |[1000,2000]                |4
ItemNumber       |["BX12345","BX12349"]      |4
Quantity         |[23,15]                    |4

这是另一个(与简单化相反)的例子。

SELECT 
       [ON].OrderNumber
     , [S].Site
     , [LN].LineNumber
     , [IN].ItemNumber
     , [Q].Quantity
FROM OPENJSON(@JsonParameter)
    WITH (
         [OrderNumber]      NVARCHAR(MAX)   '$.OrderNumber'     AS JSON
        ,[Site]             NVARCHAR(MAX)   '$.Site'            AS JSON
        ,[LineNumber]       NVARCHAR(MAX)   '$.LineNumber'      AS JSON
        ,[ItemNumber]       NVARCHAR(MAX)   '$.ItemNumber'      AS JSON
        ,[Quantity]         NVARCHAR(MAX)   '$.Quantity'        AS JSON
    ) AS jsonValues
CROSS APPLY OPENJSON(jsonValues.OrderNumber)
    WITH (OrderNumber NVARCHAR(25) '$') AS [ON]
CROSS APPLY OPENJSON(jsonValues.Site)
    WITH (Site NVARCHAR(25) '$') AS [S]
CROSS APPLY OPENJSON(jsonValues.LineNumber)
    WITH (LineNumber INT '$') AS [LN]
CROSS APPLY OPENJSON(jsonValues.ItemNumber)
    WITH (ItemNumber NVARCHAR(31) '$') AS [IN]
CROSS APPLY OPENJSON(jsonValues.Quantity)
    WITH (Quantity INT '$') AS [Q]

OrderNumber  |Site        |LineNumber |ItemNumber    |Quantity
-------------|------------|-----------|--------------|-----------
OD12034      |New York    |1000       |BX12345       |23
OD12034      |New York    |1000       |BX12345       |15
OD12034      |New York    |1000       |BX12349       |23
OD12034      |New York    |1000       |BX12349       |15
OD12034      |New York    |2000       |BX12345       |23
OD12034      |New York    |2000       |BX12345       |15
OD12034      |New York    |2000       |BX12349       |23
OD12034      |New York    |2000       |BX12349       |15

有没有办法通过在 Azure SQL DB 中使用 JSON 工具来为每个数组元素获取一行?

t-sql azure-sql-database
  • 1 个回答
  • 123 Views
Martin Hope
SQLDoug
Asked: 2017-10-05 08:24:18 +0800 CST

在 sysjobhistory 中将单个运行的作业步骤链接在一起

  • 3

我们有几个 SQL Server 运行 SQL 代理作业,在它们自己的 sysjobhistory 表中记录历史。我正在尝试设置一个集中式服务器,其作业收集所有其他服务器的历史记录,对其进行格式化,然后将其放入名为 AllJobHistory 的表中。作为此过程的一部分,我希望在一个列中表明作业的多个步骤是同一作业运行的一部分。它们已通过 job_id 列标记为同一作业的一部分,但我想知道特定行来自作业的 3:00 运行与 4:00 运行。能够基于此列进行过滤将使我们的故障排除工作变得更加容易,但我看不到任何现有系统表或 DMV 中将这些步骤链接在一起的任何内容,是吗?

我自己的第一次尝试是使用 run_date、run_time 和 run_duration 列。对于每一步,如果我从 run_time 中减去到目前为止的总 run_duration,它应该让我回到与该作业的所有其他运行相比独一无二的时间。看起来它一直在工作,直到我发现它不是(可能是因为 SQL Server 以秒为精度四舍五入 run_time 和 run_duration)。这是我对查询的尝试(删除了额外的列)。

WITH JobDetails AS 
(
    SELECT 
        QUOTENAME(UPPER('ServerName')) AS [Server],
        j.job_id AS [JobID],
        j.name AS [JobName],
        s.step_id AS [Step],
        msdb.dbo.agent_datetime(run_date, run_time) AS [RunDate],
        (run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100) AS [RunDurationSeconds]
    FROM msdb.dbo.sysjobhistory h
    INNER JOIN msdb.dbo.sysjobs j ON j.job_id = h.job_id
    LEFT OUTER JOIN msdb.dbo.sysjobsteps s ON s.job_id = h.job_id AND s.step_id = h.step_id 
    WHERE h.step_id != 0
), GroupedDetails AS (
    SELECT 
        jd.[Server],
        jd.[JobID],
        jd.JobName,
        jd.Step,
        jd.RunDate,
        jd.RunDurationSeconds,
        DATEADD(SECOND, 
            -ISNULL(SUM(jd.RunDurationSeconds) OVER
                (PARTITION BY jd.JobName ORDER BY jd.JobName, jd.RunDate, jd.Step 
                ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0), 
            jd.RunDate) AS grp
    FROM JobDetails AS  jd
)
SELECT 
    gd.[Server],
    gd.JobName,
    gd.Step,
    gd.RunDate,
    gd.RunDurationSeconds,
    CONVERT(VARCHAR(36), gd.JobID) + '_' + FORMAT(gd.grp, 'yyyyMMdd_HHmmss') AS JobRunString
FROM GroupedDetails AS gd;

这是一个示例,它按我的意愿工作,对于一个包含三个步骤的工作。请注意,JobRunString 匹配第一次运行和第二次运行。 工作示例

这是一个示例,它没有按我的意愿工作。注意 Step1RunDate + Step1RunDurationSeconds != Step2RunDate,导致 JobRunString 不匹配。 不工作示例

那么,是否有任何可靠的方法可以将 sysjobhistory 中运行的作业步骤链接在一起?

sql-server
  • 4 个回答
  • 2476 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