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

Eric S's questions

Martin Hope
Eric S
Asked: 2018-09-28 10:48:30 +0800 CST

无法完成游标操作,因为在声明游标后表架构发生了变化

  • 3

当我执行从多个链接服务器提取信息并聚合数据的存储过程时,偶尔会收到此错误消息。它看起来类似于我下面的内容。

DECLARE Cur CURSOR FOR SELECT name FROM sys.servers WHERE is_linked = 1 AND (@Environments IS NULL OR name IN (SELECT Item FROM clrStringSplit(@Environments, ',')))
OPEN cur
FETCH NEXT FROM cur INTO @Environment
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY   

    SET @Query = '          
        EXEC ' + @Environment + '.db.dashboard.storedproc ''' + CAST(@StartDate AS VARCHAR(10)) + ''', ''' + CAST(@EndDate AS VARCHAR(10)) + ''''

    INSERT INTO #Table (Environment, Column1, Column2, Column3, Column4, Column5, Column6, Column7)
    EXEC(@Query)
END TRY
BEGIN CATCH
    PRINT 'There was an error trying to query against ' + @Environment
    PRINT ERROR_MESSAGE() 
END CATCH

FETCH NEXT FROM cur INTO @Environment
END

它在每台服务器上调用的存储过程在每台服务器上都完全相同,并且是从 dbo 模式下的表中提取的基本选择语句。它将“随机”出错,并显示“无法完成游标操作,因为声明游标后表模式已更改”的消息。有时它运行良好,有时则不然。每次运行时,即使背靠背有时会起作用,有时不会。什么可能导致这种情况发生,为什么它如此断断续续?对其中一台服务器上的过程的任何给定调用都可能会生成错误。它尝试查询的服务器并不总是会产生错误。

值得一提的是,我有几个程序执行极其相似但从未产生问题的每个程序。但它们都在同一个模式(dbo)下,这是第一次使用不同的模式。

编辑 - 我忘了提到我曾尝试使用 FAST_FORWARD 游标,但它似乎没有帮助。

schema sql-server-2014
  • 1 个回答
  • 12407 Views
Martin Hope
Eric S
Asked: 2018-07-12 11:28:29 +0800 CST

SELECT MIN(+ - Column) 是做什么的?

  • 7

我今天遇到了一个查询,它做了一些我以前从未见过的事情。它做了这样的事情:

SELECT 
    MIN(+ - schema_id) AS [WhatInTheWorld?], 
    MIN(schema_id) AS MinimumID, 
    MAX(+ - schema_id) AS [Uhhh], 
    MAX(schema_id) AS MaxID
FROM sys.objects

结果如下:

WhatInTheWorld? MinimumID    Uhhh       MaxID
-4              1            -1         4

“+”和“-”到底在做什么?

sql-server sql-server-2014
  • 1 个回答
  • 220 Views
Martin Hope
Eric S
Asked: 2016-03-08 10:19:46 +0800 CST

如何设置引用多个表的外键约束

  • 2

我有一个简单的结构,我不确定如何处理弹出的一些问题。

有 4 个表:Reports, ReportParameters, ScheduledReports, ScheduledReportParameters。

ReportParameters列出报告所需的参数。

ScheduledReports是报表的预定实例。(以周四报 X 运行为例)。

ScheduledReportParameters是此实例运行时要使用的参数及其值的列表。

基本布局:

Reports:
ReportID (PK)

ReportParameters:
ReportParameterID (PK)
ReportID (FK to Reports)
Name

ScheduledReports:
ScheduledReportID (PK)
ReportID (FK to reports)

ScheduledReportParameters:
ScheduledReportID (FK to ScheduledReports)
ReportParameterID (FK to ReportParameters)
Value
(PK is formed by the ScheduledReportID and ReportParameterID)

这有一个问题,即与计划报告关联的参数不必与基础报告的实际预期一致,它可能是完全不同的基础报告,而不是计划报告所基于的报告。

所以,我想我可以将 the 添加ReportID到 the ScheduledReportParameters,但这无济于事,因为没有任何强制要求ReportIDthere 同意 there 的ScheduledReport基础。

我错过了一些简单的东西吗?或者,这比我想象的更棘手吗?

有一个计划的报告,其中的参数实际上并不与报告一起使用,这对我来说没什么大不了的,因为当我提取它们时,连接会自动过滤掉任何潜在的坏数据,但我想防止坏数据进入第一名。我知道我可以使用触发器来做到这一点,但这很快就会变得丑陋。

sql-server database-design
  • 1 个回答
  • 119 Views
Martin Hope
Eric S
Asked: 2015-05-12 11:59:33 +0800 CST

是否可以在函数中更改 CTE 的递归级别?

  • 1

我创建了一个接受字符串的函数,它返回一个表格,其中包含字符串中每个字母的位置和字符。但是,由于 CTE 递归限制为 100 级,如果传入的字符串比这长,它就会失败。我知道我可以OPTION (MAXRECURSION [value])用来更改限制,但是在定义函数时这似乎不起作用。

我的功能:

CREATE FUNCTION [dbo].[StringSplit]
(
    @String NVARCHAR(MAX)    
)
RETURNS TABLE
AS
RETURN
(   
    WITH Split(Pos,Digit)
    AS(
        SELECT 1 AS Pos, LEFT(@String, 1) AS Digit
        UNION ALL
        SELECT Pos + 1, RIGHT(LEFT(@String, Pos + 1), 1)
            FROM Split
            WHERE Pos < LEN(@String)
    )
    SELECT Pos, Digit FROM Split    
    ---OPTION (MAXRECURSION 0) -- Unable to create function if this line is UnCommented)
)

因此,由于达到 100 个默认限制,以下 sql 代码将失败:

SELECT * FROM Impact_Work.dbo.StringSplit('How long of a sentence can I possibly think of for testing thingymadoodlers out. Yes I do love the word thingymadoodlers so don''t judge me!')

现在,如果我添加该选项,它将起作用

SELECT * FROM Impact_Work.dbo.StringSplit('How long of a sentence can I possibly think of for testing thingymadoodlers out. Yes I do love the word thingymadoodlers so don''t judge me!')
OPTION (MAXRECURSION 0)

然而,那些使用这个函数的人不太可能记得在他们的查询中添加这个额外的位,所以我希望在它自己的函数中添加这个。这可能吗?(是的,当我需要拿出一些字符串进行测试时,我确实会胡思乱想)

sql-server sql-server-2014
  • 3 个回答
  • 3231 Views
Martin Hope
Eric S
Asked: 2015-03-25 09:09:35 +0800 CST

以最佳方式找到关系链的末端

  • 2

我有一个包含 id 列、父列和子列的表。因此,对于每条记录,我知道在链关系中它之前是什么记录,之后是什么记录,但是从单个记录中,我不知道它在链中的什么位置,也不知道它的第一部分或最后一部分是什么连锁,链条。

出于演示目的,假设我们有以下设置。我意识到这种设置存在许多设计问题,但这是我必须解决的问题。

CREATE TABLE Relationships (
ID VARCHAR(4), 
ParentID VARCHAR(4),
ChildID VARCHAR(4)
)

-- Insert root entries with their children
INSERT INTO Relationships (ID, ParentID, ChildID)
VALUES ('0001', '', '0003'), ('0002', '', '0004')

-- Now add further entries for each relationship chain
INSERT INTO Relationships(ID, ParentID, ChildID)
VALUES('0003', '0001', '0005'), ('0005', '0003', '0006'), ('0006', '0005', '0007'), ('0007', '0006', ''), 
  ('0004', '0002', '')

--Now we have two chains of 0001 -> 0003 -> 0005 -> 0006 -> 0007 and 0002 ->   0004

通过像下面这样的递归 CTE,我可以找到所有记录在它们的链中是如何相关的以及它们在链中的位置。

WITH RelationshipChain AS (
SELECT ID, ParentID, ChildID, 0 AS Seq, ID AS RootID
FROM Relationships WHERE ParentID = ''
UNION ALL
SELECT r2.ID, r2.ParentID, r2.ChildID, rc.Seq + 1 AS Seq, rc.RootID AS RootID
FROM Relationships r2 
INNER JOIN RelationshipChain rc ON rc.ChildID = r2.ID 
)

SELECT * FROM RelationshipChain
ORDER BY RootID, Seq

对于大约 200 万条记录,这在大约 30 秒内运行,这非常好,但是如果我尝试还包括链的最后部分,则运行时间是 4 倍。目前,我正在这样做:

WITH RelationshipChain AS (
SELECT ID, ParentID, ChildID, 0 AS Seq, ID AS RootID
FROM Relationships WHERE ParentID = ''
UNION ALL
SELECT r2.ID, r2.ParentID, r2.ChildID, rc.Seq + 1 AS Seq, rc.RootID AS RootID
FROM Relationships r2 
INNER JOIN RelationshipChain rc ON rc.ChildID = r2.ID 
)

SELECT * 
FROM RelationshipChain rc
CROSS APPLY (
SELECT MAX(Seq) AS FinalSeq FROM RelationshipChain WHERE rc.RootID = RootID
) AS b
CROSS APPLY (
SELECT ID AS LastChild FROM RelationshipChain WHERE b.FinalSeq = seq AND rc.RootID = RootID
) AS c
ORDER BY RootID, Seq

有没有办法更有效地做到这一点?

sql-server performance
  • 1 个回答
  • 2030 Views
Martin Hope
Eric S
Asked: 2015-02-11 09:01:48 +0800 CST

如何从脚本执行维护作业并取回结果

  • 2

我正在尝试找到一种从脚本执行维护作业的方法,并在作业成功与否时让它返回。我知道我可以使用 msdb.dbo.sp_start_job 来执行维护作业,但它只会启动它而不返回是否成功。

我的最终目标是我们将 JAMS 用于我们所有的作业调度,我们只想检查那里是否有任何作业失败。

sql-server
  • 1 个回答
  • 322 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