У меня есть этот запрос, который помогает мне выбрать имена столбцов, которые имеют нулевые значения.что я хочу сделать, это обновить только значение первого столбца.Я попытался включить оператор break после запроса на обновление, чтобы выйти из цикла while курсора, но я получаю эту ошибку. Невозможно использовать оператор BREAK
вне области действия оператора WHILE
.это код, который я пробовал
AS
declare @col varchar(255), @cmd varchar(max)
DECLARE getinfo cursor for
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = 'Grilles_de_tailles' and c.name like 'T%'
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT TOP 1 * FROM Grilles_de_tailles WHERE [' + @col + '] IS NOT NULL and Code_Grille_BW = '+@codegrillebw+') begin
update Grilles_de_tailles set ['+@col+'] = '+@libtaille+' where Code_Grille_BW = '+@codegrillebw+'
break
end'
EXEC(@cmd)
FETCH NEXT FROM getinfo into @col
END
CLOSE getinfo
DEALLOCATE getinfo
Я тоже пробовал этот способ
AS
declare @col varchar(255), @cmd varchar(max), @breakval numeric
SET @breakval=0
DECLARE getinfo cursor for
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = 'Grilles_de_tailles' and c.name like 'T%'
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0 AND @breakval=0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT TOP 1 * FROM Grilles_de_tailles WHERE [' + @col + '] IS NOT NULL and Code_Grille_BW = '+@codegrillebw+') begin
update Grilles_de_tailles set ['+@col+'] = '+@libtaille+' where Code_Grille_BW = '+@codegrillebw+'
set '+@breakval+' = '+1+'
end'
EXEC(@cmd)
FETCH NEXT FROM getinfo into @col
END
CLOSE getinfo
DEALLOCATE getinfo
таким образом, он даже не входит в цикл while
Я пытался использоватьGOTO, это код
DECLARE getinfo cursor
for
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = 'Grilles_de_tailles' and c.name like 'T%'
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT TOP 1 * FROM Grilles_de_tailles WHERE @col IS NOT NULL
and Code_Grille_BW = '2456')
BEGIN
print ('aaaa')
update Grilles_de_tailles set @col = 'M'
GOTO Branch_one
END
FETCH NEXT FROM getinfo into @col
END
Branch_one:
CLOSE getinfo
DEALLOCATE getinfo ```
nothing happened I got "Commands completed successfully" but it seems that it didn't execute the instructions between BEGIN .. END since the print didn't work