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 / dba / Perguntas / 170837
Accepted
Jonathan
Jonathan
Asked: 2017-04-13 06:50:32 +0800 CST2017-04-13 06:50:32 +0800 CST 2017-04-13 06:50:32 +0800 CST

Não é possível executar o trabalho - a subconsulta retornou mais de 1 valor

  • 772

Estou tentando executar o seguinte trabalho:

IF (SELECT ars.role_desc
    FROM sys.dm_hadr_availability_replica_states ars
    INNER JOIN sys.availability_groups ag
    ON ars.group_id = ag.group_id
    AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
   --We're on the secondary node, throw an error
   THROW 50001, 'Unable to execute job on secondary node',1
END

Mas acaba recebendo o erro:

A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue =, !=, <, <= , >, >= ou quando a subconsulta é usada como uma expressão. [SQLSTATE 21000] (Erro 512). A etapa falhou.

Eu tenho isso trabalhando em outro servidor sql, mas neste específico recebo essa mensagem de erro e não consigo descobrir o porquê. Eu sou novo no SQL, então gostaria de uma ajuda. Os dois servidores não diferem na versão sql.

Aqui está o resultado do trabalho SQL de trabalho:

Mensagem Executado como usuário: VT\sqladmin-internaltes. Não é possível executar o trabalho no nó secundário [SQLSTATE 42000] (Erro 50001). A etapa falhou.

sql-server
  • 2 2 respostas
  • 995 Views

2 respostas

  • Voted
  1. Best Answer
    SqlWorldWide
    2017-04-13T07:27:47+08:002017-04-13T07:27:47+08:00

    Você deve ter mais de um grupo de disponibilidade na instância conforme mencionado no comentário. Eu sugiro que você use esta função. Detalhes aqui .

    If sys.fn_hadr_is_primary_replica ( @dbname ) <> 1   
    BEGIN  
    -- If this is not the primary replica, exit (probably without error).  
    END  
    -- If this is the primary replica, continue to do the backup.  
    

    Você pode executar esta consulta para verificar quantos grupos de disponibilidade você tem.

    SELECT count(*) AS [NumOfAG]
    FROM sys.availability_groups
    
    • 3
  2. Nic
    2017-04-13T08:10:09+08:002017-04-13T08:10:09+08:00

    Se você estiver travado executando o SQL Server 2012, o SqlWorldWide infelizmente não funcionará para você (embora você seja 2014 ou superior, é o caminho a seguir). Acabei escrevendo minha própria função para lidar com isso na versão inferior ...

    CREATE FUNCTION dbo.fnIsDatabasePrimary ( @DBName sysname )
    RETURNS INT
    AS
        BEGIN
    
            DECLARE @ExistsAsPrimary INT;
    
    
    /* Check if DB exists */
            IF ( SELECT DB_ID(@DBName)
               ) IS NULL
                BEGIN
                    SELECT  @ExistsAsPrimary = -1
                END
            ELSE
                BEGIN
    /* Check if DB participating in an AG, if not, we're good to go */
                    IF NOT EXISTS ( SELECT  database_id
                                    FROM    sys.dm_hadr_database_replica_states
                                    WHERE   database_id = DB_ID(@DBName) )
                        BEGIN
                            SELECT  @ExistsAsPrimary = 1
                        END
                    ELSE
                        BEGIN
    /* See if database is primary in an AG */
                            IF ( SELECT AGS.primary_replica
                                 FROM   sys.dm_hadr_database_replica_states d
                                        JOIN sys.dm_hadr_availability_group_states AGS ON d.group_id = AGS.group_id
                                 WHERE  d.database_id = DB_ID(@DBName)
                                        AND AGS.primary_replica = @@SERVERNAME
                                        AND d.is_local = 1
                               ) IS NOT NULL
                                BEGIN
                                    SELECT  @ExistsAsPrimary = 1;
                                END
                            ELSE
                                BEGIN
                                    SELECT  @ExistsAsPrimary = 0;
                                END
                        END
                END
            RETURN @ExistsAsPrimary
        END
    
    GO
    

    Crie isso no banco de dados mestre e chame com

    IF (SELECT master.dbo.fnIsDatabasePrimary(@dbname) = 1 
    BEGIN 
    --do work 
    END 
    ELSE 
    BEGIN 
    --do other work 
    END
    

    Ele retorna:

    1 - se o banco de dados for gravável (inclui bancos de dados que não estão em AGs)

    0 - se o banco de dados for secundário em um AG

    -1 - se o banco de dados não existir

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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