Использование переменных окружения в T-SQL - PullRequest
4 голосов
/ 13 мая 2009

Как я могу прочитать значение системной переменной среды в сценарии T-SQL?

Это для работы на SQL Server 2005.

Ответы [ 6 ]

2 голосов
/ 27 октября 2009

Чтобы «прочитать значение системной переменной среды в сценарии T-SQL», можно настроить SQL Management Studio на использование «режима sqlcmd».

Тогда вы можете использовать так:

Print '$(TEMP)'

:r $(Temp)\Member.sql
go

Я не уверен, как это делается вне «SQL Management Studio», но это должно быть трудно выяснить.

2 голосов
/ 10 сентября 2009

Эй, если вы хотите получить имя сервера, просто позвоните SELECT @@SERVERNAME

2 голосов
/ 13 мая 2009

Спасибо за ответы. Они помогли мне найти рабочее решение, хотя это, вероятно, не самый продвинутый метод:

declare @val varchar(50)
create table #tbl (h varchar(50))
insert into #tbl exec master..xp_cmdshell 'echo %computername%'
set @val = (select top 1 h from #tbl)
drop table #tbl

В частности, я пытался получить имя хоста, echo% computername% можно было заменить системной командой hostname . Но теперь это работает для любой переменной среды.

2 голосов
/ 13 мая 2009

xp_cmdshell обычно лучше избегать по соображениям безопасности.

Вам лучше использовать сборку CLR. Вот хорошее введение в создание сборки CLR .

Вы можете использовать System.Environment.GetEnvironmentVariable () в C # - вы найдете больше информации о том, как это сделать здесь .

2 голосов
/ 13 мая 2009

Это должно дать вам список (при условии, что вы разрешите людям выполнять xp_cmdshell)

exec master..xp_cmdshell 'set'

Примечание: xp_cmdshell представляет собой угрозу безопасности ...

Вы также можете сделать это с помощью управляемого хранимого процесса, расширенного хранимого процесса или через компонент com.

1 голос
/ 10 сентября 2018

Чтобы определить конкретную переменную среды в T-SQL (MS SQL Server), вы можете сделать что-то вроде:

Предоставление разрешений безопасности

use [master]

execute sp_configure 'show advanced options', 1
reconfigure
go

execute sp_configure 'xp_cmdshell', 1
reconfigure
go

grant execute on xp_cmdshell to [DOMAIN\UserName]

grant control server to [DOMAIN\UserName]
go

Источник: https://stackoverflow.com/a/13605864/601990

Использовать переменные среды

-- name of the variable 
declare @variableName nvarchar(50) = N'ASPNETCORE_ENVIRONMENT'

-- declare variables to store the result 
declare @environment nvarchar(50)
declare @table table (value nvarchar(50))

-- get the environment variables by executing a command on the command shell
declare @command nvarchar(60) = N'echo %' + @variableName + N'%';
insert into @table exec master..xp_cmdshell @command;
set @environment = (select top 1 value from @table);

-- do something with the result 
if @environment = N'Development' OR @environment = N'Staging'
    begin
    select N'test code'
    end
else 
    begin
    select N'prod code'
    end

Также не забудьте перезапустить службу SQL Server при изменении переменных среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...