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

Zoinky's questions

Martin Hope
Zoinky
Asked: 2023-07-24 05:37:15 +0800 CST

在具有相同表但不同身份的两个数据库之间复制数据

  • 6

我有表Listings, Media它是“源”数据库的子表Listings并基于ListingId“源”数据库进行链接,并且我在“目标”数据库中有相同的表。

将所有列表复制到目标表 将列表及其子项复制到目标Media表,请记住,目标Media表必须获取ListingId插入到目标Listings表的内容,这是一个identity column

INSERT INTO Listings ( Title, ...)
SELECT  Title..
FROM [source].[dbo].Listings
WHERE ListingId IN (
    SELECT s.ListingId
    FROM [source].[dbo].Listings s
    LEFT JOIN Listings d ON s.ImportedReferenceNumber = d.ImportedReferenceNumber
    WHERE d.ListingId IS NULL
);

-- Insert corresponding media records into destination.Media table with new ListingIds.
INSERT INTO Media ( ListingId, Url, ThumbnailUrl, TypeId)
SELECT New.ListingID, Url, ThumbnailUrl, TypeId
FROM [source].[dbo].Media m
INNER JOIN (
    SELECT s.ListingId, d.ListingId AS NEW_ListingId
    FROM [source].[dbo].Listings s
    LEFT JOIN Listings d ON s.ImportedReferenceNumber = d.ImportedReferenceNumber
    WHERE d.ListingId IS NULL
) AS NEW ON m.ListingId = NEW.ListingId;

第一部分工作正常,但没有任何内容插入到目标中,因为执行查询时,源表和目标表Media之间没有区别Listings

sql-server
  • 1 个回答
  • 26 Views
Martin Hope
Zoinky
Asked: 2021-12-08 09:03:35 +0800 CST

比较多个子记录时的查询

  • 0

我似乎无法弄清楚 tsql 应该做什么来执行以下操作。

我想查询具有类别 1 和 2 的所有推文的推文表(可能超过 2 个类别)

所以查询应该为以下插入返回推文 1 和 3

USE tempdb
CREATE TABLE [dbo].[Tweets]([Id] [bigint] NOT NULL)
CREATE TABLE [dbo].[TweetCategories]([TweetId] [bigint] NOT NULL, [CategoryId] [int] NOT NULL)

INSERT INTO Tweets(Id) VALUES(1)
INSERT INTO Tweets(Id) VALUES(2)
INSERT INTO Tweets(Id) VALUES(3)
INSERT INTO Tweets(Id) VALUES(4)

INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(1, 1)
INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(1, 2)

INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(2, 2)
INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(2, 3)

INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(3, 1)
INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(3, 2)
INSERT INTO TweetCategories(TweetId, CategoryId) VALUES(3, 3)


DROP TABLE tweets
DROP TABLE TweetCategories

效率很重要,因为我的推文将有超过 200 万条记录,类别也可能有几百万

sql-server t-sql
  • 2 个回答
  • 73 Views
Martin Hope
Zoinky
Asked: 2021-12-07 09:54:44 +0800 CST

具有 json 的字段上的高效 where 子句

  • 0

我有以下查询,我想在 json 字段上添加 where 子句,下面是我的 json,我根据类别列表过滤掉,在下面的示例中,有 3 个类别,如果我传入 7,9,我希望将以下记录包含在我的列表中。

我想我不确定我的 json where 子句会是什么样子并且有效

TSql

SELECT TOP 1 *
  FROM Tweets                                
  WHERE IsProcessed = 0 AND HasEvents = 1
  AND --Json filter
  ORDER BY TweetDate DESC

json

{
   "Dates":{
      "DateTimeResults":[
         {
            "DateTime":"2014-03-20T00:00:00-04:00",
            "UtcOffsetMinutes":0,
            "Text":"today",
            "Timex":"2014-03-20"
         }
      ]
   },
   "Categories":[
      7,
      9,
      12
   ]
}
sql-server json
  • 1 个回答
  • 106 Views
Martin Hope
Zoinky
Asked: 2020-12-20 08:30:01 +0800 CST

如何将中位数添加到此查询?

  • 1

我想将中值添加到以下查询中,中值显然适用于每种类型的卧室 unittypeid (已经在 group by 中),我尝试使用 PERCENTILE_CONT 但我无法弄清楚如何使其工作。

CREATE TABLE #TempListings
(
    ListingId int,
    Price money,
    UnitTypeId int,
    BedroomsAvailable int
)
INSERT INTO #TempListings VALUES(1, 1000, 1, 1)
INSERT INTO #TempListings VALUES(2, 2000, 1, 1)
INSERT INTO #TempListings VALUES(3, 3000, 1, 1)

INSERT INTO #TempListings VALUES(4, 1000, 1, 2)
INSERT INTO #TempListings VALUES(5, 2000, 1, 2)
INSERT INTO #TempListings VALUES(6, 3000, 1, 2)

INSERT INTO #TempListings VALUES(7, 1000, 2, 1)
INSERT INTO #TempListings VALUES(8, 2000, 2, 1)
INSERT INTO #TempListings VALUES(9, 3000, 2, 1)

INSERT INTO #TempListings VALUES(10, 1000, 2, 2)
INSERT INTO #TempListings VALUES(11, 2000, 2, 2)
INSERT INTO #TempListings VALUES(12, 3000, 2, 2)
  
SELECT BedroomsAvailable, 
    COUNT(listingid) AS Count, 
    MIN(price) AS MinPrice, 
    MAX(price) AS MaxPrice, 
    AVG(price) AS AveragePrice,
    STDEV(price) as StandardDeviation,
    UnitTypeId
FROM #TempListings
GROUP BY BedroomsAvailable, UnitTypeId
ORDER BY UnitTypeId

DROP TABLE #TempListings

如果重要,我正在使用 sqlserver 2019

sql-server t-sql
  • 2 个回答
  • 52 Views
Martin Hope
Zoinky
Asked: 2019-10-05 12:22:53 +0800 CST

加入 2 个视图时查询速度极慢

  • 2

我会先说我不是 DBA,只是一个试图用我们拥有的以下查询找出性能问题的开发人员。

 SELECT
        OCCoverID as StaffID, FullName, SUM(OCWeight) AS Num
    FROM vuOCStaffAbsentExpandedMini
        INNER JOIN vuStaff ON OCCoverID = StaffID
    WHERE
        SADate = '2019-10-4'
        AND MIDent = 506
        AND SASupplyID IS NULL
        AND CoverStaffSupplyID IS NULL
        AND StaffMIDent <> 1
    GROUP BY
        OCCoverID, FullName

每次执行大约需要 1 分钟,我们已经仔细检查(我们认为)所有必需的索引,通过索引调谐器运行它并且仍然存在相同的问题。以下是它创建的实际计划。

任何帮助将不胜感激,我们正在使用 sql server 2012 express

https://www.brentozar.com/pastetheplan/?id=HJgOtXHur

sql-server t-sql
  • 1 个回答
  • 1140 Views
Martin Hope
Zoinky
Asked: 2019-09-20 08:16:35 +0800 CST

将数据库恢复到新服务器的正确方法

  • 0

我们正在从 sql server 2008 迁移到 2017 并将执行以下操作

  1. 在新机器上安装sql server 2017
  2. 备份旧服务器上的所有数据库
RESTORE DATABASE DbName FROM DISK = 'C:\temp\Live\dbname.bak'
WITH
   MOVE 'DbName' TO 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\DbName.mdf',
   MOVE 'DbName_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\DbName_log.ldf'

如果可能,我想避免使用该WITH部分,但这需要我先创建一个空白数据库并将其版本设置为 2008,然后才能正确恢复。

我想我要问的是,在没有任何数据库的服务器上获取 .bak 文件并将其还原为 db 的最佳方法是什么。

宁愿在不附加/分离的情况下执行此操作

我有大量的数据库,所以我将创建一个脚本来一次完成所有这些。

sql-server sql-server-2008
  • 1 个回答
  • 103 Views
Martin Hope
Zoinky
Asked: 2019-09-13 05:02:11 +0800 CST

丢失的数据,如何恢复(sql server)

  • 1

我们目前有一个备份已设置为简单的数据库,每天晚上都在备份(我们有过去 7 天的备份),是否可以找到在六月删除的记录?

数据库功能齐全,因此没有损坏或任何东西,我们只想看看我们是否可以在当前日志文件中找到已删除的记录。我使用了 apexsql 日志,但这表明什么都没有,假设因为在简单模式下完成备份时,它几乎会丢弃日志。

另一个问题是,假设我希望将来能够获取已删除的记录,我应该将我的备份设置为“完整”,这是否足够好,还是我还需要进行批量日志备份?

我想有没有一种简单的方法可以解释什么模式意味着什么以及我得到什么类型的恢复。ms 文章https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server?view=sql-server-2017谈到了这一点,但不清楚对我来说,当需要获取特定的已删除/更改记录时,在不同情况下需要发生什么。

sql-server recovery
  • 3 个回答
  • 629 Views
Martin Hope
Zoinky
Asked: 2018-01-02 22:22:51 +0800 CST

对于数据库中的记录量,表大小似乎很高

  • 1

我有一个简单的表在此处输入图像描述

我已经删除了 twitterdetail 和 rawsource 并将其设置为空,因此它们中没有数据,但是该表的空间是 350mb。 在此处输入图像描述

有 67k 条记录,所以如果对填充的字段进行数学计算,它不应该那么多。

我错过了什么吗?

sql-server t-sql
  • 1 个回答
  • 50 Views
Martin Hope
Zoinky
Asked: 2017-02-19 06:48:55 +0800 CST

如何修复 DBCC CHECKDB 报告的错误

  • 2

我收到了很多错误DBCC CHECKDB,包括:

消息 8939,级别 16,状态 98,第 1 行
表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 3667181342891245568(未知类型),页面 (7791:-1694668604)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 133129 和 -12。

消息 8928,级别 16,状态 1,行 1
对象 ID 405576483,索引 ID 73,分区 ID 72057594049200128,分配单元 ID 72057594054246400(行内数据类型):无法处理页面 (1:194923)。有关详细信息,请参阅其他错误。

消息 8976,级别 16,状态 1,行 1
表错误:对象 ID 405576483,索引 ID 73,分区 ID 72057594049200128,分配单元 ID 72057594054246400(类型行内数据)。页面 (1:194923) 未在扫描中看到,尽管其父级 (1:186194) 和前一个 (1:194922) 引用了它。检查任何以前的错误。

消息 8980,级别 16,状态 1,行 1
表错误:对象 ID 405576483,索引 ID 73,分区 ID 72057594049200128,分配单元 ID 72057594054246400(类型行内数据)。索引节点页面 (1:186194),插槽 103 引用子页面 (1:194924) 和前一个子页面 (1:194923),但没有遇到它们。

消息 8978,级别 16,状态 1,行 1
表错误:对象 ID 405576483,索引 ID 73,分区 ID 72057594049200128,分配单元 ID 72057594054246400(类型行内数据)。页面 (1:194932) 缺少上一页 (1:194931) 的引用。可能的连锁问题。

最重要的是,最后会转达以下内容:

CHECKDB 在数据库“houseme”中发现 0 个分配错误和 28 个一致性错误。

repair_allow_data_loss 是 DBCC CHECKDB (houseme) 发现的错误的最低修复级别。

我该怎么办?

sql-server dbcc-checkdb
  • 1 个回答
  • 11824 Views
Martin Hope
Zoinky
Asked: 2015-09-02 08:14:15 +0800 CST

跨多个子表查询优化的总计(总和/计数)

  • 7

我们的数据库中有 12 种类型的费用,其中一些具有相当不同的数据减去 Amount 字段。我们在应用程序和报告中有多个地方需要单个和多个费用总计以及每个费用类型和总计的计数。最后,我们希望所有这些调用都使用一个视图,但对使用存储过程持开放态度。

为此,我们研究了多种替代方案,发现 CTE 允许我们在不使用临时表的情况下获取所有需要的数据。使用连接不起作用,因为无论我们尝试什么,我们都会看到记录被复制或删除。

我附上了费用表的子集和包含 CTE 的查询。有人有比这更好的选择吗?更快的东西?我们是否适当地接近这种“扁平化”?

请注意,无论是视图还是过程,此查询的执行计划都是相同的,而且过程似乎需要两倍的时间才能运行。

下面是代码

WITH pe AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM PettyExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
),hpe AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM HirePremisesExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
), ae AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM AdvertisingExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
), se AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM ServiceExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
), gse AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM GoodsSuppliedExpenses 
WHERE IsDisputed = 0 AND IsUndisputed = 0
group by EventRegistrationId
), thve AS
(
SELECT 
    EventRegistrationId
    ,sum(AmountPaid)            as AmountPaidTotal
    ,sum(CommercialValueAmount) as CommercialValueAmountTotal
    ,count(1) as ExpenseCount
FROM TravelHireVehicleExpenses 
WHERE IsDisputed = 0 AND 
IsUndisputed = 0
group by EventRegistrationId

)
select
distinct eer.EventRegistrationId
--Petty Expense
,ISNULL(pe.AmountPaidTotal,0) as PettyExpenseAmountPaid
,ISNULL(pe.CommercialValueAmountTotal,0) as PettyExpenseCommercial
,ISNULL(pe.ExpenseCount,0) as PettyExpenseCount
--Hire On Premise Expense
,ISNULL(hpe.AmountPaidTotal,0) as HireOnPremisesExpenseAmountPaid
,ISNULL(hpe.CommercialValueAmountTotal,0) as HireOnPremisesExpenseCommercial
,ISNULL(hpe.ExpenseCount,0) as HireOnPremisesExpenseCount
--Advertising Expense
,ISNULL(ae.AmountPaidTotal,0) as AdvertisingExpenseAmountPaid
,ISNULL(ae.CommercialValueAmountTotal,0) as AdvertisingExpenseCommercial
,ISNULL(ae.ExpenseCount,0) as AdvertisingExpenseExpenseCount
--Services Expense
,ISNULL(se.AmountPaidTotal,0) as ServiceExpenseAmountPaid
,ISNULL(se.CommercialValueAmountTotal,0) as ServiceExpenseCommercial
,ISNULL(se.ExpenseCount,0) as ServiceExpenseExpenseCount
--Goods Supplied Expense
,ISNULL(gse.AmountPaidTotal,0) as GoodsSuppliedExpenseAmountPaid
,ISNULL(gse.CommercialValueAmountTotal,0) as GoodsSuppliedExpenseCommercial
,ISNULL(gse.ExpenseCount,0) as GoodsSuppliedExpenseExpenseCount
--Travel and Vehicle Expense
,ISNULL(thve.AmountPaidTotal,0) as TravelVehicleExpenseAmountPaid
,ISNULL(thve.CommercialValueAmountTotal,0) as TravelVehicleExpenseCommercial
,ISNULL(thve.ExpenseCount,0) as TravelVehicleExpenseExpenseCount
--All Expenses
,ISNULL(pe.AmountPaidTotal,0) 
    + ISNULL(hpe.AmountPaidTotal,0)
    + ISNULL(ae.AmountPaidTotal,0) 
    + ISNULL(se.AmountPaidTotal,0)
    + ISNULL(gse.AmountPaidTotal,0) 
    + ISNULL(thve.AmountPaidTotal,0) as AllExpenseAmountPaidTotal
,ISNULL(pe.CommercialValueAmountTotal,0) 
    + ISNULL(hpe.CommercialValueAmountTotal,0)
    + ISNULL(ae.CommercialValueAmountTotal,0) 
    + ISNULL(se.CommercialValueAmountTotal,0)
    + ISNULL(gse.CommercialValueAmountTotal,0) 
    + ISNULL(thve.CommercialValueAmountTotal,0) as AllExpenseCommercialValueTotal
,ISNULL(pe.ExpenseCount,0) 
    + ISNULL(hpe.ExpenseCount,0)
    + ISNULL(ae.ExpenseCount,0) 
    + ISNULL(se.ExpenseCount,0)
    + ISNULL(gse.ExpenseCount,0) 
    + ISNULL(thve.ExpenseCount,0) as AllExpenseCount
from EventRegistrations eer
left join pe on pe.EventRegistrationId = eer.EventRegistrationId
left join hpe on hpe.EventRegistrationId = eer.EventRegistrationId
left join ae on ae.EventRegistrationId = eer.EventRegistrationId 
left join se on se.EventRegistrationId = eer.EventRegistrationId
left join gse on gse.EventRegistrationId = eer.EventRegistrationId
left join thve on thve.EventRegistrationId = eer.EventRegistrationId

更新:

这是带有插入内容的数据库模式,供那些有兴趣观看它的人使用。

数据库架构和插入

使用 SQL Server 2014 Standard,我将 db schema/inserts 更改为一个文件(此处为大文件),其中包含更多插入内容以及上传的执行计划和结果(2 个图像并排显示所有返回的列)

执行计划

结果 1

结果继续

sql-server sql-server-2014
  • 3 个回答
  • 216 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