You can check like this:
1. Check the status of the availability group:
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 where ag.name = 'AvailabilityGroupName' and ars.is_local = 1) = 'PRIMARY' begin -- this server is the primary replica, do something here end else begin -- this server is not the primary replica, (optional) do something here end
* Remember to change AvailabilityGroupName
or
2. prohibit the execution of tasks on the secondary:
IF master.dbo.svf_AgReplicaState('my_group_name')=0 raiserror ('This is not the primary replica.',2,1)
or
3. Check for a record on the secondary:
IF (SELECT CONVERT(sysname,DatabasePropertyEx(DB_NAME(),'Updateability'))) != 'READ_ONLY' BEGIN
or
4. for SQL2014 and later:
IF master.dbo.fn_hadr_database_is_primary_replica('Admin') = 1 BEGIN -- this server is the primary replica, do something here END ELSE BEGIN -- this server is not the primary replica, (optional) do something here END
source share