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.
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 .
Você pode executar esta consulta para verificar quantos grupos de disponibilidade você tem.
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 ...
Crie isso no banco de dados mestre e chame com
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