Eu roubei descaradamente a resposta aqui para fazer isso: (este não é o único caso para o qual estou procurando uma solução)
SELECT 'SELECT Top 10 [table] = '''
+ REPLACE(name, '''','')
+ ''', * FROM '
+ QUOTENAME(SCHEMA_NAME([schema_id]))
+ '.'
+ QUOTENAME(name)
+ ';' as SQLText
FROM sys.tables AS t
ORDER BY name;
O motivo foi que na resposta o DECLARE @sql NVARCHAR(MAX)
não foi suficiente para conter todos os nomes das tabelas, acho que temos 120 tabelas (ou qualquer outra coisa), e o texto SQL estava sendo cortado no NVARCHAR(MAX)
limite.
Talvez neste caso possa EXEC sp_executesql SQLText
e sindicalizá-los, mas existe uma maneira de transformar todas as linhas em um texto e executá-lo?
Existe um limite para o tamanho do texto de um procedimento armazenado?
Observe que não estou atrás da resposta para este caso específico, mas este é um exemplo do tipo de problema que estou tentando resolver.