Чтобы отследить, какой компьютер вызывает хранимую процедуру, вы можете использовать различные методы. Вот несколько примеров с фрагментами кода:
Метод 1: использование встроенной функции
Вы можете использовать функцию HOST_NAME() в SQL Server для получения имени компьютера, выполняющего хранимую процедуру. Вот пример:
CREATE PROCEDURE YourStoredProcedure
AS
BEGIN
DECLARE @MachineName NVARCHAR(128)
SET @MachineName = HOST_NAME()
-- Rest of your stored procedure logic
-- You can log or use @MachineName as needed
END
Метод 2: использование контекста приложения
Вы можете установить контекст приложения в коде приложения перед выполнением хранимой процедуры, передав имя компьютера в качестве параметра. Вот пример на C#:
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand("YourStoredProcedure", connection))
{
command.CommandType = CommandType.StoredProcedure;
// Set the machine name as a parameter
command.Parameters.AddWithValue("@MachineName", Environment.MachineName);
connection.Open();
command.ExecuteNonQuery();
}
}
В хранимой процедуре вы можете получить доступ к имени машины, используя параметр:
CREATE PROCEDURE YourStoredProcedure
@MachineName NVARCHAR(128)
AS
BEGIN
-- Rest of your stored procedure logic
-- You can log or use @MachineName as needed
END
Метод 3: использование расширенных событий
Вы можете настроить сеанс расширенных событий в SQL Server для захвата имени компьютера при выполнении хранимой процедуры. Вот пример:
CREATE EVENT SESSION CaptureMachineName
ON SERVER
ADD EVENT sqlserver.sp_statement_completed
(
ACTION (sqlserver.client_hostname)
WHERE (sqlserver.database_name = 'YourDatabaseName' AND sqlserver.object_name = 'YourStoredProcedure')
)
ADD TARGET package0.asynchronous_file_target
(
SET FILENAME = 'C:\Path\To\Log\capture_machine_name.xel'
)
WITH (MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS)
GO
ALTER EVENT SESSION CaptureMachineName
ON SERVER
STATE = START;
Этот метод фиксирует имя компьютера при выполнении указанной хранимой процедуры и сохраняет его в указанном файле журнала.