Это должно сделать это
DECLARE @TABLE TABLE ( [COLUMN_NAME] sysname );
INSERT INTO @TABLE VALUES
( 'COL1' ),
( 'COL2' ),
( 'COL3' ),
( 'COL4' ),
( 'COL5' );
DECLARE @json NVARCHAR(MAX) =
(
SELECT N'DECLARE @' + REPLACE( COLUMN_NAME, ' ', '_' ) AS MyString
FROM @TABLE
FOR JSON PATH
)
SELECT JSON_VALUE(value,'$.MyString') AS 'JSON Transform'
FROM OPENJSON(@json,' Результаты
+--------------+
|JSON Transform|
+--------------+
| DECLARE @COL1|
| DECLARE @COL2|
| DECLARE @COL3|
| DECLARE @COL4|
| DECLARE @COL5|
+--------------+
Эта ссылка поможет вам понять функции OPENJSON
и JSON_VALUE
, Выражения JSON Path [114 ]
)
Результаты
+--------------+
|JSON Transform|
+--------------+
| DECLARE @COL1|
| DECLARE @COL2|
| DECLARE @COL3|
| DECLARE @COL4|
| DECLARE @COL5|
+--------------+
Эта ссылка поможет вам понять функции OPENJSON
и JSON_VALUE
, Выражения JSON Path [114 ]
Изначально в Лиспе не было лексических переменных - только динамические. И не было ни SETQ, ни SETF, только функция SET.
То, что теперь записывается как:
(setf (symbol-value '*foo*) 42)
, было записано как:
(set (quote *foo*) 42)
, что в конечном итоге было сокращено до SETQ (SET Quoted):
(setq *foo* 42)
Затем появились лексические переменные, и SETQ стали использоваться для присвоения им тоже - так что это больше не была простой оболочкой вокруг SET.
Позже кто-то изобрел SETF (SET Field) как общий способ присвоения значений структурам данных, чтобы отразить l-значения для других языков:
x.car := 42;
будет записано как
(setf (car x) 42)
Для симметрии и общности SETF также предоставляет функциональные возможности SETQ. На этом этапе было бы правильно сказать, что SETQ был примитивом низкого уровня, а SETF - операцией высокого уровня.
Затем появились макросы символов. Чтобы макросы символов могли работать прозрачно, было понято, что SETQ должен действовать как SETF, если «переменная»
setq
аналогичен set
с первым аргументом в кавычках - (set 'foo' (bar baz))
аналогичен (setq foo '(bar baz))
. setf
, с другой стороны, действительно тонкий - это похоже на «косвенное обращение». Я предлагаю http://www.nano.com/lisp/cmucl-tutorials/LISP-tutorial-16.html как лучший способ начать его понимание, чем любой ответ здесь может дать ... в вкратце, setf
принимает первый аргумент как «ссылку», так что, например, (aref myarray 3)
будет работать (как первый аргумент для setf
), чтобы установить элемент внутри массива.
(set ls '(1 2 3 4)) => Error - ls has no value
(set 'ls '(1 2 3 4)) => OK
(setq ls '(1 2 3 4)) => OK - make ls to (quote ls) and then have the usual set
(setf ls '(1 2 3 4)) => OK - same as setq so far BUT
(setf (car ls) 10) => Makes ls '(10 2 3 4) - not duplicated by setq/set