Как я могу прочитать значение переменной системной среды в сценарии T-SQL?
Это должно работать на SQL Server 2005.
Как я могу прочитать значение переменной системной среды в сценарии T-SQL?
Это должно работать на SQL Server 2005.
Это должно дать вам список (при условии, что вы разрешаете людям запускать xp_cmdshell)
exec master..xp_cmdshell 'набор'
Примечание: xp_cmdshell представляет собой угрозу безопасности ...
Вы также можете сделать это с помощью управляемой хранимой процедуры, расширенной хранимой процедуры или через компонент com.
Чтобы «прочитать значение системной переменной среды в сценарии T-SQL», вы можете настроить SQL Management Studio на использование «sqlcmd Mode».
Тогда вы можете использовать это так:
Print '$(TEMP)'
:r $(Temp)\Member.sql
go
Я не уверен, как это делается вне «SQL Management Studio», но это будет сложно выяснить.
xp_cmdshell обычно лучше избегать из соображений безопасности.
Лучше использовать сборку CLR. Вот хорошее введение в создание сборки CLR .
Вы можете использовать System.Environment.GetEnvironmentVariable () в C # - вы найдете дополнительную информацию о том, как это сделать здесь.
Спасибо за ответы. Они помогли мне найти рабочее решение, хотя это, наверное, не самый продвинутый метод:
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. Но теперь это работает для любой переменной окружения.
Эй, если вы хотите узнать имя сервера, просто позвоните SELECT @@SERVERNAME
Чтобы определить конкретную переменную среды в 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 при изменении переменных среды.