AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-69149

AcePL's questions

Martin Hope
AcePL
Asked: 2022-01-11 01:23:37 +0800 CST

SQL Server SSMS - Funcionalidade de edição de 200 linhas - é possível que duas ou mais pessoas alterem o trabalho uma da outra usando essa funcionalidade?

  • 0

Vamos considerar um cenário:

Duas ou mais pessoas estão trabalhando em uma tabela que armazena dados de configuração de um aplicativo. Existem várias configurações nessa tabela, para que cada pessoa possa trabalhar em seu próprio conjunto de dados.

A funcionalidade de edição de 200 linhas é mais rápida do que o script, porque há muitos caracteres especiais que precisam escapar no script, em Editar é apenas copiar e colar na maioria dos casos.

Cada pessoa trabalha em linhas específicas para uma configuração, portanto, a consulta para edição contém a cláusula where. Claro que não está acontecendo constantemente, mas ao testar, às vezes há períodos de atividades incomuns.

Agora, aqui está a pergunta: quando as alterações são salvas em Editar 200 linhas, o SSMS confirma a tabela inteira ou apenas as linhas no painel? Além disso: e se duas pessoas acidentalmente trabalharem no mesmo conjunto de dados - elas substituirão o trabalho uma da outra?

Minha intuição diz "não, apenas linhas específicas" para a primeira e "sim" para a segunda, mas não consigo encontrar nenhuma descrição sobre como essa função de interface do usuário do SSMS funciona em segundo plano (o que pode ser porque sou excepcionalmente lento e denso hoje... não uma corona, mas não me sentindo bem).

sql-server ssms
  • 1 respostas
  • 76 Views
Martin Hope
AcePL
Asked: 2017-04-20 06:50:06 +0800 CST

Varredura de índice de tabela com um registro com 2,2 bilhões de execuções

  • 6

Há algo que não tenho certeza de como resolver na consulta que tenho.

Primeiro, as definições:

Tabela de serviços de correio. Com um registro.

CREATE TABLE [dbo].[CS](
    [ServiceID] [int] IDENTITY(1,1) NOT NULL,
    [CSID] [nvarchar](6) NULL,
    [CSDescription] [varchar](50) NULL,
    [OperatingDays] [int] NULL,
    [DefaultService] [bit] NULL,
 CONSTRAINT [CourierServices_PK] PRIMARY KEY CLUSTERED 
(
    [ServiceID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
       ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90
) ON [PRIMARY]
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[CS] ON 

INSERT [dbo].[CS] ([ServiceID], [CSID], [OperatingDays], [DefaultService])
           VALUES (1, N'RM48', 2, 1)
SET IDENTITY_INSERT [dbo].[CS] OFF
SET ANSI_PADDING ON

GO
/****** Object:  Index [ix_CourierServices]    Script Date: 19/04/2017 14:27:03 ******/
CREATE NONCLUSTERED INDEX [ix_CourierServices] ON [dbo].[CS]
(
    [CSID] ASC,
    [DefaultService] ASC,
    [OperatingDays] ASC
)
INCLUDE (   [CSDescription]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

BD de calendário e tabela, código do Genius Jim Horn :

CREATE TABLE [dbo].[days](
    [PKDate] [date] NOT NULL,
    [calendar_year] [smallint] NULL,
    [calendar_quarter] [tinyint] NULL,
    [calendar_quarter_desc] [varchar](10) NULL,
    [calendar_month] [tinyint] NULL,
    [calendar_month_name_long] [varchar](30) NULL,
    [calendar_month_name_short] [varchar](10) NULL,
    [calendar_week_in_year] [tinyint] NULL,
    [calendar_week_in_month] [tinyint] NULL,
    [calendar_day_in_year] [smallint] NULL,
    [calendar_day_in_week] [tinyint] NULL,
    [calendar_day_in_month] [tinyint] NULL,
    [dmy_name_long] [varchar](30) NULL,
    [dmy_name_long_with_suffix] [varchar](30) NULL,
    [day_name_long] [varchar](10) NULL,
    [day_name_short] [varchar](10) NULL,
    [continuous_year] [tinyint] NULL,
    [continuous_quarter] [smallint] NULL,
    [continuous_month] [smallint] NULL,
    [continuous_week] [smallint] NULL,
    [continuous_day] [int] NULL,
    [description] [varchar](100) NULL,
    [is_weekend] [tinyint] NULL,
    [is_holiday] [tinyint] NULL,
    [is_workday] [tinyint] NULL,
    [is_event] [tinyint] NULL,
PRIMARY KEY CLUSTERED 
(
    [PKDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

/****** Object:  Index [ix_days]    Script Date: 19/04/2017 14:38:47 ******/
CREATE NONCLUSTERED INDEX [ix_days] ON [dbo].[days]
(
    [PKDate] ASC
)
INCLUDE (   [is_weekend],
    [is_holiday],
    [is_workday],
    [is_event]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
 SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

Agora, estou executando uma consulta que faz referência a ambas as tabelas por bit de código:

Select
    OID
   ,case when
     Cast(o.[CreationDate] as time) > '16:00:00' 
        then (select top 1 [PKDate] from [calendar].[dbo].days
              where is_weekend <> 1 and is_holiday <>1 and 
              PKDate > cast(o.[CreationDate] as date)
              order by PKDate asc)
        else (select top 1 [PKDate] from [calendar].[dbo].days
              where is_weekend <> 1 and is_holiday <>1 and 
              PKDate >= Cast(o.[CreationDate] as date) 
              order by PKDate asc)
        end  OperatingDate
   ,case when
     Cast(o.[CreationDate] as time) > '16:00:00' 
        then (select top 1 [PKDate] from [calendar].[dbo].days
              where is_weekend <> 1 and is_holiday <>1 and 
              PKDate > dateadd(day,isnull(
                  (select top 1 [operatingdays]
                  from [dbo].[CS]
                  where DefaultService = 1)
                 ,2)+1,Cast(o.[CreationDate] as date))
                 order by PKDate asc)
            else (select top 1 [PKDate] from [calendar].[dbo].days
                  where is_weekend <> 1 and is_holiday <>1 and
                  PKDate > dateadd(day,isnull(
                      (select top 1 [operatingdays]
                       from [dbo].[CS]
                       where DefaultService = 1)
                      ,2), Cast(o.[CreationDate] as date))
                      order by PKDate asc)
            end EstimatedDeliveryDate
  ,(select dateadd(day,3,o.[CreationDate])) DeliveryDate
From o

Agora a pergunta é, relacionada a scans de índice e número de execuções: por que os 2 BILHÕES? Ou 6 bilhões? A saída de toda a consulta é, reconhecidamente, 1,7 milhão de linhas, mas isso não explica os números insanos mostrados no plano de consulta:

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

Se eu puder martelar todas essas varreduras, posso reduzir significativamente o tempo de consulta, mas antes de tudo: como interpreto esses números para encontrar uma solução?

A tabela de dias contém 7,6 k linhas (para cobrir os anos 2000-2020).

sql-server sql-server-2012
  • 3 respostas
  • 1286 Views
Martin Hope
AcePL
Asked: 2016-10-28 01:31:40 +0800 CST

Consulta do SQL Server em vários servidores vinculados - desempenho péssimo

  • 1

Existem três bancos de dados diferentes em três servidores vinculados separados SQL0( SQL1hospedando 2 dbs) SQL2(hospedando 1 db). SQL0atua como um servidor de relatórios e hospedará todos os bancos de dados em questão (método TBD - talvez replicação, talvez mais), mas como os dados serão antigos para alguns fins de auditoria (<24H), ainda será necessário executar algumas consultas ao vivo dados.

Duas configurações:

Configuração 1. Localhost\SQL0- vinculado a SQL1e SQL2(cada um usando suas respectivas sacredenciais para se conectar)

Configuração 2. SQL1vinculada a SQL2(novamente, usando sacredenciais)

A consulta em questão une (por enquanto) 8 tabelas nesses três bancos de dados. No futuro, haverá outro servidor, outro banco de dados e várias outras tabelas unidas na consulta, executadas regularmente pelo agente e os resultados enviados por e-mail. Geralmente retorna menos de 100 linhas, mas é limitado TOP 10durante o desenvolvimento.

Por que essa consulta SQL2leva 3s ou menos para ser executada, mas 105s quando executada SQL0? Contanto que seja apenas tráfego de rede, estou disposto a desconsiderar a execução 30 vezes mais longa, mas se estiver afetando o desempenho dos servidores vinculados, preciso encontrar a estatística da solução.

Todos os servidores estão na mesma LAN, mas SQL2em outro prédio conectado via VPN.

Tudo está no SSMS, em uma máquina conectada na mesma rede que todas as outras, sem visualizações, sem servidores vinculados a servidores vinculados ou outras "complicações"; Eu tenho acesso a todos os servidores como sa.

Planos de consulta (reais), SQL2 e SQL0 respectivamente: Plano de consulta no SQL2 e Plano de consulta no SQL0

sql-server sql-server-2012
  • 2 respostas
  • 2163 Views
Martin Hope
AcePL
Asked: 2016-10-11 02:59:20 +0800 CST

SSMS 2012 - consulta salva carregada não executável (erro "nome de objeto inválido")

  • 0

Tenho várias consultas salvas (cada uma estava funcionando bem quando as desenvolvi). Mas quando eu os carrego no SSMS, eles imediatamente mostram erros em todos os nomes de tabelas que estão no script. Além disso, não consigo selecionar o banco de dados relevante na caixa "Bancos de dados disponíveis" (ou qualquer banco de dados nesse servidor) e USE [DB_NAME]o comando também não funciona.

No entanto, se eu navegar no "Object Explorer" para qualquer tabela em qualquer banco de dados no servidor que eu quiser e fizer até mesmo um simples Select Top 1000, cole a consulta inteira que não está funcionando - voila - ela funciona bem.

É importante para isso que eu esteja conectado a vários servidores SQL em máquinas diferentes ao mesmo tempo? Caso seja necessário - todos SQL Server 2012.

Alguém tem uma ideia do que está acontecendo? É extremamente irritante passar por todas as etapas acima sempre que preciso executar uma consulta. Obrigado!

sql-server sql-server-2012
  • 2 respostas
  • 384 Views
Martin Hope
AcePL
Asked: 2016-02-24 07:20:06 +0800 CST

Xquery, insert, Trigger e nenhum lugar para espremer o procedimento armazenado

  • 1

Eu tenho um procedimento armazenado, que é, basicamente, xquery puxando dados de xml e inserindo-os em várias tabelas. Depois de inserir na última das tabelas mencionadas, o gatilho é acionado e, em seguida, esses dados são usados ​​para fazer mais manipulação de dados.

tudo vai bem até um ponto em que tenho que fazer cortes e emendas sérios. Por sério, quero dizer adicionar a uma string os sobrenomes e nomes dos clientes selecionados de várias linhas e colunas de uma tabela. anteriormente, isso era feito por meio de software de terceiros, que fragmentava o xml e chamava o procedimento armazenado do SQL Server com a referida manipulação de string para cada linha do conjunto de dados derivado do xml.

Agora que estou usando Xquery, isso não está disponível - inserir de selecionar de xquery não permitirá reutilizar o referido procedimento armazenado e não posso usar o bit de código para fazer a manipulação em xquery.

Exemplo de código para manipulação de string:

select top 100 @string = @string + Surname +' & '
from usr_bie
where ref = @ref and code = @code and type = 'Client' order by mc desc
Select @string = left(@string,len(@string)-2) + ', '
Select top 100 @string = @string + FirstName +
(case
 when middlename is not null 
 then ' ' + Middlename 
 else '' end
) + ' & ' 
from usr_bie 
where ref = @ref and code = @code and type = 'Client' order by mc desc
Select @string = left(@string,len(@string)-2)

Eu preciso atribuir o resultado do acima ao valor em xquery:

Insert into a (col1, col2,...)
Select
t.c.value('(../Ref)[1]','varchar(50)') as col1
....
from @xml.nodes(...)t(c)

Entendo que Xquery insere várias linhas, portanto, não há uma maneira fácil de chamar o antigo procedimento armazenado para cada linha, mas OTOH também não consigo fazer minha @stringmanipulação como acima.

Existe uma solução que eu não estou familiarizado?

Eu converti o código de manipulação de string para funcionar (novamente), e desta vez funcionou. Mas ainda há trabalho a ser feito nos outros valores do xml ... Então a pergunta é: existe uma maneira de fazer RBAR com xquery, para que eu possa manipular os dados de várias maneiras conforme necessário? Como está agora, Insert está sendo feito em várias linhas, então não posso fazer condição simples: if @variable = somevalue begin..., onde @variable é passado como um parâmetro de procedimento armazenado? E há algum sentido em seguir o caminho lento (rbar), em vez de - como @Duffy sugeriu - ir para o CTE?

stored-procedures sql-server-2012
  • 1 respostas
  • 262 Views
Martin Hope
AcePL
Asked: 2015-11-24 05:07:59 +0800 CST

Analisando XML digitado com um namespace padrão e nó raiz inconsistente

  • 5

Eu tenho um arquivo xml estruturado e digitado.

<WebService xmlns="http://www.orbis-software.com/WebSvcCon">
 <NewLeads>
  <OutputSchema>
  <root xmlns="" type="array">
   <item type="object">
   <SaleProperty type="object">
    <Type type="string">Freehold</Type>
    <PostDistrict type="string">xxx</PostDistrict>
    <Address type="string">address</Address>
     <Value type="number">17.0</Value>
   </SaleProperty>
   <Transaction type="string">SaleOnly</Transaction>
   <Quote type="object">
    <Sale type="object">
     <Fees type="number">450.0</Fees>
     <Disbursements type="number">0.0</Disbursements>
     <StampDuty type="number">0.0</StampDuty>
     <Total type="number">450.0</Total>
    </Sale>
   <Discount type="number">0.0</Discount>
   <VAT type="number">90.0</VAT>
   <Total type="number">540.0</Total>
  </Quote>
  <MoverId type="number">12345678</MoverId>
  <Name type="string">Mr AS</Name>
  <Email type="string">[email protected]</Email>
  <Telephone type="string">0123456789</Telephone>
  <Comments type="string">Joint ownership</Comments>
  <EstimatedMoveDate type="string">2015-11-25T05:57:00</EstimatedMoveDate>
  <Charge type="number">4.99</Charge>
  <ChargeStatus type="string">Chargeable</ChargeStatus>
 </item>
</root>
</OutputSchema></NewLeads></WebService>

Além disso, o objeto SaleProperty pode estar ausente, em vez disso pode ser o objeto PurchaseProperty. Da mesma forma, o objeto Quote pode conter objetos Sale, Purchase, Remortgage ou sale e Purchase simultaneamente. Não consigo encontrar nenhuma dica sobre como inseri-lo em uma tabela via xquery no SQL Server 2012. até mesmo um valor (ou seja, transação), a única coisa, exceto erros, que recebo é uma string vazia.

minha consulta de amostra (baseada em exemplos do MSDN):

SELECT t.c.value('(.)[1]','varchar(50)') as type
from @ixml.nodes('/root/item/transaction') as t(c)

Eu gostaria de ter um exemplo de como inserir este xml na tabela (onde cada elemento possível tem sua própria coluna.

Presumo que o problema esteja nos namespaces e na digitação forte do xml. No entanto, é isso que recebo do serviço da web. Eu trabalho em xml faltando e contendo a segunda declaração xmlns no elemento raiz, bem como com a estrutura reduzida para apenas raiz.

sql-server sql-server-2012
  • 2 respostas
  • 12669 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve