У меня есть 4 одинаковые базы данных
('User1','User2','User3','User4')
И цикл, выполняющий то, что должен делать:
DECLARE @json NVARCHAR(2000)
DECLARE @getid CURSOR
SET @getid = CURSOR FOR
SELECT [custom_data] FROM [User1].[usr].[table] where [custom_data] like '%:true%' or [custom_data] like '%:false%'
OPEN @getid
FETCH NEXT
FROM @getid INTO @json
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT JSON_MODIFY(@json, '$.field','value')
FETCH NEXT FROM @getid INTO @json
END
CLOSE @getid
DEALLOCATE @getid
Мой вопрос: как перебирать базы данных?Я попытался вложить цикл, содержащий переменную с именем базы данных, а затем выполнить запрос следующим образом:
Сначала я:
DECLARE C CURSOR FOR SELECT name FROM sysdatabases WHERE name IN ('User1','User2','User3','User4')
, как описано во многих примерах, и после этого я хотел конкататьвведите имя db в запрос и выполните его следующим образом:
DECLARE @dbname varchar(50)
DECLARE C CURSOR FOR SELECT name FROM sysdatabases
WHERE name IN ('User1','User2','User3','User4')
OPEN C
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('DECLARE @json NVARCHAR(2000);
DECLARE @getid CURSOR; SET @getid = CURSOR FOR SELECT [custom_data] FROM '+@dbName+'.[usr].[transactions]
OPEN @getid;
FETCH NEXT;
FROM @getid INTO @json;
WHILE @@FETCH_STATUS = 0;
BEGIN;
SELECT JSON_MODIFY(@json, ''$.Field'',''Value'');
FETCH NEXT FROM @getid INTO @json
END
CLOSE @getid
DEALLOCATE @getid')
FETCH NEXT FROM C INTO @dbname
END
CLOSE C
DEALLOCATE C
, но завершается цикл без ошибок с массажем
Команды успешно выполнены.
но это ничего не меняет.Буду признателен за вашу помощь