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

beeks's questions

Martin Hope
beeks
Asked: 2016-02-02 07:01:07 +0800 CST

'CONCAT' 不是可识别的内置函数名称

  • 35

一个客户报告说他们在 SQL Server 2012 上运行,我们在最终交付之前交付了一些测试查询以进行测试,但是:

'CONCAT' 不是可识别的内置函数名称。

我知道这CONCAT()是 SQL Server 2012 中引入的一个新的内置函数,一切都很好,但是我被要求回滚我的更改以使这个 2008R2 兼容以“执行查询的用户可能不具有执行 Transact-SQL 权限。” 所以我只是在证明我的观点,即客户端很可能在 DEV 中安装的 SQL Server 版本与在 PROD 中安装的版本不同。

我找不到任何关于专门拒绝SELECT/EXECUTE内置标量值函数的权限的信息,但有可能吗,如果是这样,用户是否仍会收到相同的错误文本?

sql-server sql-server-2008
  • 2 个回答
  • 135841 Views
Martin Hope
beeks
Asked: 2015-12-23 07:45:17 +0800 CST

找到较大版本号的最简单方法?

  • 3

我有一张表,以多点字符串形式存储版本信息,即“4.1.345.08”、“5.0.1.100”等。我正在寻找找出哪个更大的最快方法。有没有比我在下面提出的方法更快或更容易的方法?需要注意的是,我 90% 确定我们应该只在这里找到点分数值,但我不能保证将来会这样。

DECLARE @str1 nvarchar(max)='15.0.4000.8'
DECLARE @str2 nvarchar(max)='15.6.4000.8'

SELECT 
CASE 
WHEN PARSENAME(@str1, 4) > PARSENAME(@str2, 4) 
   THEN @str1
WHEN PARSENAME(@str1, 4) < PARSENAME(@str2, 4)
   THEN @str2
ELSE CASE
   WHEN PARSENAME(@str1, 3) > PARSENAME(@str2, 3)
      THEN @str1
   WHEN PARSENAME(@str1, 3) < PARSENAME(@str2, 3)
      THEN @str2
   ELSE CASE
      WHEN PARSENAME(@str1, 2) > PARSENAME(@str2, 2)
         THEN @str1
      WHEN PARSENAME(@str1, 2) < PARSENAME(@str2, 2)
         THEN @str2
      ELSE CASE
         WHEN PARSENAME(@str1, 1) > PARSENAME(@str2, 1)
            THEN @str1
         WHEN PARSENAME(@str1, 1) < PARSENAME(@str2, 1)
            THEN @str2
         ELSE NULL
         END
      END
   END
END
sql-server t-sql
  • 1 个回答
  • 60 Views
Martin Hope
beeks
Asked: 2014-11-15 20:23:36 +0800 CST

通过排序不佳的表格进行分页的最具成本效益的方法?

  • 8

我有一个包含三列的表:HashUID1、HashUID2、Address_Name(这是一个文本电子邮件地址,前两个哈希列是一些疯狂的创建,用于将事件参与者表链接到电子邮件地址。它很丑,几乎没有用我的控制。关注 address_name 索引)

它有 7800 万行。排序不正确。无论如何,该索引被拆分到许多快速 LUN 上并执行非常快速的索引查找。

我需要创建一系列查询以一次仅提取 20,000 个“每页行”,但要避免冲突或重复。由于没有标识列或易于排序的列,是否有一种简单的方法来选择所有内容并翻页?

我说的是否正确,如果我从 hugetablewithemails 中执行 select * from hugetablewithemails 到临时表中,然后通过 row_number 选择该表在事务期间保留在内存中,这对我来说是过多的内存资源?这似乎是首选的分页方法。我宁愿按统计百分比分页。:(

有一个索引按顺序维护 address_name 电子邮件地址,并且维护良好。在过去的一周里,我一直想通过花一些时间来研究构建一个基于窗口函数吐出范围的过程来帮助其他开发人员,该函数基于统计数据(我不擅长,但这个查询真的让我感兴趣)到提供从 1 到(变量)LEFT LIKE 字符的索引范围,满足 20,000 行——但我什至没有时间开始查询……

几个问题:

  1. 有什么建议么?不是在寻找实际代码,只是根据经验寻找一些提示或建议,也许是警告。我想避免在初始扫描后进行额外的索引扫描。

  2. 这是正确的方法吗?

  3. 我正在考虑打破所有电子邮件地址的索引总和,收集行数 (*)、/20,000,并将其用作窗口函数,根据总行数的百分比对最小/最大子字符串 (1,5) 值进行分组建立分组范围。想法?

这是针对无法修改源数据库的 ETL 过程。

我希望通过一次完整的索引扫描我可以做到:

  • 查询以根据索引使用情况(按字母顺序排序)获取直方图,并使用 min/max 将其分解(窗口化)以创建这样的范围,以便轻松查找所需的索引:

  • A-> AAAX,(例如 20k 行)AAA-Z,B->(另外 20k),B->BAAR -> BAAR-> CDEFG -> CDEFH > FAAH,等等。

我们为此 ETL 过程在这些数据库中运行读取提交。我们只是试图将它分批处理成 20k 行,因为 DBA 说我们通过抓取完整的表使用了太多的网络资源。如果数据发生变化(这是一个问题),我们会即时更新 DW 和暂存表。

我很想使用临时表,但如果我这样做了,我会溢出到 tempdb 并通过电子邮件从 DBA 那里得到关于它的抨击,而且数据库太大了。

sql-server pagination
  • 3 个回答
  • 659 Views
Martin Hope
beeks
Asked: 2014-05-29 20:23:51 +0800 CST

拆分一副牌,并返回结果,就好像洗过一次一样

  • 5

假设我有一张桌子,上面有一副牌,编号为 01-52。我可以返回顶部和底部的卡片,就好像我通过执行以下操作将联合选择查询的每一侧放在我的左手和右手上:

select top 26 * from DeckOfCards order by CardNumber desc
union all
select top 26 * from DeckOfCards order by CardNumber asc

这将是平分。

但是,我如何才能让 SQL Server 将返回的结果交织在一起,就好像我已经拿走了那个并集的两部分,一半在我的左手,另一半在我的右手,然后像一副纸牌一样洗牌一次?

IE:CardNumber 52,后跟 1,顺序如下:52、1、51、2、50、3、49、4 等...

这不是家庭作业问题,只是我试图闭上眼睛时脑海中闪过的事情之一。:)

sql-server t-sql
  • 3 个回答
  • 696 Views
Martin Hope
beeks
Asked: 2014-04-12 20:20:43 +0800 CST

击败 SQL Server 的最佳方法是什么?

  • 4

我有一个问题,当主数据库负载很重时,软件驱动的复制系统将无法完全复制。例如,如果我们执行一个 sproc 500 次,实际上可能会执行 450 次。但只有当我们处于疯狂的数据库负载下时(一个例子是 SAN 管理员在工作时间更新固件)。我关心的是为每条消息创建事务,等待它们超时,然后回滚,因为目标 SQL 服务器有可能位于另一个数据中心的 WAN 上。

询问:我想重振我的 DEV SQL 服务器,以便在开发中复制大量的锁定/cxpacket 等待。但还不足以让所有访问完全死锁数小时,也许只是为了模拟数据包丢失。

场景:服务器 B(实用程序机器)有一个本地 SQL Express 实例。它用于瞬态数据。它针对目标数据库触发一系列存储过程以插入新行,然后将新行插入到由 PK 链接的子表中。等等等等。

通常它只是花花公子。除了生产 DBA 之外,不要让该系统的主题专家有任何控制权或对锁统计信息的可见性。我有完全的控制权,可以分析将数据传播到目的地的系统,但没有分析另一端发生的事情,除了等待……等待……等待……我被锁定了吗?我不知道!

我想在实验室中对此进行模拟并尝试调整所使用的存储过程。我正在考虑心跳更新 anx xp_cmdshell 更新到簿记表,并且还使用 xp_cmdshell 使用 ping 分析来查询/优化/调整事务,并在必要时回滚事务,以防所有事务都未提交。然后再试一次,也许在另一个分布式主机上。

问题:上次发生这种情况是因为 TEMPDB 非常庞大(正在使用大量临时表)并且必须分页。DBA 表示没有任何问题,但也报告磁盘队列长度一次超过 50+ 数小时。必须喜欢它。

sql-server-2008
  • 2 个回答
  • 387 Views
Martin Hope
beeks
Asked: 2013-09-20 13:56:45 +0800 CST

使用每行计数 (*) 更新本地表,这是远程服务器上内部连接的聚合

  • 0

我在链接服务器上有一个大约 350m 行的表,我在其中添加了一个额外的 INT 列作为 PACKAGE 和 DOC2 上连接的结果的记录计数(external_identification)。由于表太大,我想分批处理更新,这样我就可以衡量进度并避免创建巨大的临时表。每列都有索引。

这是 CTE 发挥作用的一个很好的例子吗?老实说,他们让我对他们需要的写作方式感到困惑,很难想象......

这些表的结构如下:

ServerA(实用程序 SQL 服务器)
表:CLIP_IDs
列:Package_UUID nvarchar(255)、MessageExtractState tinyint、[count] int(350m 行)

ServerB(主数据库服务器)
表:PACKAGE
列:Package_UUID nvarchar(255)、Package_id bigint(650m 行)
表:DOC2
列:External_Identification nvarchar(255)、Package_id bigint(2b 行)

如果从一个服务器启动查询效率更高,则两个 SQL 服务器都是双向链接的。我感觉会从 ServerA 发出查询,因为执行计划似乎提供较少的远程查询。

我在 26 小时后停止了下面的查询,因为我认为我有语法逻辑错误。有人可以解释它是什么并提供任何建议吗?

从 ServerA 执行:

DECLARE @rowsUpdated INT

SET @rowsUpdated = 1

WHILE (@rowsUpdated > 0)
BEGIN
    UPDATE CLIP_IDs
    SET [Count] = x.[count]
    FROM (
        SELECT TOP 50000 c.package_uuid
            ,count(d.external_identification) AS [count]
        FROM CLIP_IDs c
        INNER JOIN ServerB.DATABASE.dbo.package p(NOLOCK) ON c.package_uuid = p.package_uuid
        INNER JOIN ServerB.DATABASE.dbo.doc2 d(NOLOCK) ON p.package_id = d.package_id
        WHERE c.messageextractstate = 1
            AND c.[count] IS NULL
        GROUP BY c.package_uuid
        ) x

    SET @rowsUpdated = @@rowcount

    PRINT N'Finished set of rows: ' + convert(VARCHAR, getdate(), 120)
END
sql-server sql-server-2005
  • 1 个回答
  • 698 Views
Martin Hope
beeks
Asked: 2013-07-27 20:14:36 +0800 CST

Anti-Semi Join 错误的解决方法

  • 9

我构建了以下 SQL Server 查询,但它遇到了SQL Server 2005 中的反半连接缺陷,这会导致基数估计不准确(1 - 呃!)并且永远运行。由于它是一个长期生产的 SQL Server,我不能轻易建议升级版本,因此我不能在这个特定查询上强制使用 traceflag 4199 提示。

我很难重构WHERE AND NOT IN (SELECT). 有人可以帮忙吗?我已经确保尝试使用基于集群密钥对的最佳连接。

SELECT TOP 5000 d.doc2_id
    ,d.direction_cd
    ,a.address_type_cd
    ,d.external_identification
    ,s.hash_value
    ,d.publishdate
    ,d.sender_address_id AS [D2 Sender_Address_id]
    ,a.address_id AS [A Address_ID]
    ,d.message_size
    ,d.subject
    ,emi.employee_id
FROM assentor.emcsdbuser.doc2 d(NOLOCK)
INNER JOIN assentor.emcsdbuser.employee_msg_index emi(NOLOCK)
    ON d.processdate = emi.processdate
    AND d.doc2_id = emi.doc2_id
INNER LOOP JOIN assentor.emcsdbuser.doc2_address a(NOLOCK)
    ON emi.doc2_id = a.doc2_id
    AND emi.address_type_cd = a.address_type_cd
    AND emi.address_id = a.address_id
INNER JOIN sis.dbo.sis s(NOLOCK) ON d.external_identification = s.external_identification
WHERE d.publishdate > '2008-01-01'
    **AND d.doc2_id NOT IN (
        SELECT doc2_id
        FROM assentor.emcsdbuser.doc2_address d2a(NOLOCK)
        WHERE d.doc2_id = d2a.doc2_id
            AND d2a.address_type_cd = 'FRM'
        )**
OPTION (FAST 10)

请注意,该Employee_MSG_Index表是 500m 行,doc2是 1.5b 行,SIS是 ~500m 行。

任何帮助,将不胜感激!

sql-server sql-server-2005
  • 2 个回答
  • 1488 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