Desculpe se isso foi respondido em outro lugar, mas não consegui encontrar nada aqui ou online.
O openrowset tem um limite de tamanho de arquivo? Estou tentando escrever um procedimento armazenado, parte do qual verifica se existem determinados caracteres no arquivo e, se existirem, eu teria que pular para a próxima seção do procedimento armazenado. Até agora, simplesmente inseri em massa o arquivo inteiro em uma tabela de uma coluna e fiz:
IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%}%')>0 GOTO NEXTSECTION
IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%~%')>0 GOTO NEXTSECTION
IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%#%')>0 GOTO NEXTSECTION
É confiável, mas muito lento ao lidar com arquivos grandes (às vezes com mais de 10 GB). Estou pensando que a consulta abaixo seria mais rápida para arquivos grandes
DECLARE @FILE NVARCHAR(MAX)
select @FILE = BULKCOLUMN from (
select * from openrowset(BULK N'filpath', single_clob) [a]
)a
IF(SELECT IIF(@FILE LIKE '%{%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%}%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%~%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%@%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%£%',1,0)) = 1 GOTO NEXTSECTION
Mas, como eu digo, a inserção em massa é confiável e eu odiaria arriscar o arquivo ser truncado ao usar OPENROWSET se houver algum tipo de limite de tamanho de arquivo.
Qualquer conselho sobre o assunto seria apreciado.
Eu sei que não é sua pergunta principal, mas você mencionou desempenho lento. Ao verificar se um determinado caractere ou substring existe dentro de uma string maior, você deve tentar usar CHARINDEX('x', strColumn) em vez de LIKE '%x%'. Isso aumentará drasticamente o seu desempenho. Usar LIKE com % ao redor do seu termo de pesquisa é muito lento e caro.
Eu não acredito que OPENROWSET tenha um limite, pelo menos não um que eu tenha encontrado - e não há um documentado, então para responder a essa pergunta, NÃO.
No entanto, o SSMS é um aplicativo de 32 bits, então acho que isso limita sua memória em um sistema operacional de 64 bits a 4 GB - então, faça o que fizer, está limitado por isso. Isso não significa que o arquivo máximo que você pode importar é de 4 GB, mas o transmitiria pelo aplicativo com a memória RAM disponível.
Além disso, se você estiver executando o OPENROWSET em seu laptop/cliente SSMS em um servidor remoto, isso também o deixará lento. Considere executar o OPENROWSET no servidor - tenho visto grandes melhorias de velocidade fazendo o trabalho no servidor, não no cliente.
Da Microsoft:-
Observação O SSMS é um processo de 32 bits. Portanto, é limitado a 2 GB de memória. ( https://support.microsoft.com/en-za/help/2874903 )