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.
Não era problema com
NVARCHAR(MAX)
limite com certeza. 120 tabelas não é muito eNVARCHAR(MAX)
o limite é muito acima do que é necessário aqui (até 2 GB de dados), mais informações link .Acabei de verificar esta solução e funciona para mim (399 tabelas).
Se você quiser ver todo o conteúdo de
NVARCHAR(MAX)
valor no SSMS (SELECT
ePRINT
ter limites), você pode fazer algo assim:Conforme sugerido por @Dan Guzman, uma abordagem mais confiável seria: