Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ескейпиране на командни параметри, предадени на xp_cmdshell към dtexec

С две думи, поставете CMD /S /C " в началото и " накрая. Между тях можете да имате колкото искате цитати.

Ето как да го направите:

declare @cmd varchar(8000)
-- Note you can use CMD builtins and output redirection etc with this technique, 
-- as we are going to pass the whole thing to CMD to execute
set @cmd = 'echo "Test" > "c:\my log directory\logfile.txt" 2> "c:\my other directory\err.log" '


declare @retVal int
declare @output table(
    ix int identity primary key,
    txt varchar(max)
)


-- Magic goes here:
set @cmd = 'CMD /S /C " ' + @cmd + ' " '

insert into @output(txt)
exec @retVal = xp_cmdshell @cmd
insert @output(txt) select '(Exit Code: ' + cast(@retVal as varchar(10))+')'

select * from @output


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо SQL Server добавя цяло число от 4 байта към неуникални клъстерирани индекси

  2. Външен ключ към композитен ключ

  3. Изтривайте само записи, по-стари от 50 реда, докато групирате по 1 колона

  4. Какво означава символът тръба/вертикална лента в TSQL?

  5. Как да получите първия запис от всяка група от резултата, извлечен с помощта на група по команда