Как написать цикл SQL для проверки строк в нескольких базах данных с одинаковыми именами, но с разными номерами архивов? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь написать цикл WHILE в SQL Server с переменной varchar.

Это работает

DECLARE @counter INT = 18;

WHILE @counter >= 14
BEGIN
    PRINT @counter;
    SET @counter = @counter - 1
END

Но я действительно хочу это цикл while, которыйбудет проходить через каждый из этих архивов, проверять, есть ли в них какие-либо строки, и, если они пустые, продолжать, пока не будет найдена строка в одном или до указанного номера архива.Я пытался использовать курсор, но не могу понять это.Спасибо.

DatabaseArchive20
DatabaseArchive19
DatabaseArchive18
DatabaseArchive17

Это то, что я пробовал.

Вот пример, с которым я пытался работать.

DECLARE @counter INT = 18
DECLARE @sql VARCHAR (1000)

WHILE @counter >= 14
BEGIN
    SET @counter = @counter - 1
    SET @sql = 'SELECT * FROM [DatabaseArchive' + @counter + '].[dbo].[Feeds] WHERE AccNum = 123456'
    PRINT @sql
END

Яполучение этой ошибки

Преобразование не удалось при преобразовании значения varchar 'SELECT * FROM [DatabaseArchive' в тип данных int

1 Ответ

2 голосов
/ 19 сентября 2019

Спасибо за редактирование вашего вопроса.

Вы получаете сообщение об ошибке, потому что SQL Server пытается добавить ваш @counter (как в арифметике) вместо объединения это к вашей строке.Чтобы предотвратить эту ошибку, вам нужно cast или convert превратить ее в varchar.

DECLARE @counter INT = 18
DECLARE @sql VARCHAR (1000)
WHILE @counter >= 14
BEGIN
SET @counter = @counter-1
SET @sql= 'SELECT * FROM [DatabaseArchive'+cast(@counter as varchar(2))+'].[dbo].[Feeds] WHERE 
AccNum=123456'
PRINT @sql
END

Я бы по-прежнему предлагал использовать Proc

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