Uso de dados text, ntext e image em gatilhos INSTEAD OF
As modificações de Dados podem envolver as colunas text, ntext e image. Em tabelas base, o valor armazenado em uma coluna text, ntext ou image é um ponteiro de texto que aponta para as páginas que contêm os dados. Para obter mais informações, consulte Dados em linha.
Observação |
---|
O uso de dados text, ntext e image só está disponível para propósitos de compatibilidade com versões anteriores. É preferível armazenar dados grandes usando os tipos de dados varchar(max), nvarchar(max) e varbinary(max). Os gatilhos AFTER e INSTEAD OF oferecem suporte ao uso de dados varchar(max), nvarchar(max) e varbinary(max) nas tabelas inserido e excluído. |
Embora os gatilhos AFTER não ofereçam suporte a dados text, ntext ou image nas tabelas inserido e excluído, os gatilhos INSTEAD OF fornecem suporte a esses dados. Os dados text, ntext e image são armazenados nas tabelas inserido e excluído de forma diferente da utilizada para armazenar dados nas tabelas base. Os dados text, ntext e image não são armazenados como uma cadeia separada de páginas. Em vez disso, eles são armazenados como uma cadeia contínua de caracteres dentro de cada linha. Isso significa não há nenhum ponteiro de texto para colunas text, ntextou image nas tabelas inserido e excluído. As funções TEXTPTR e TEXTVALID e as instruções READTEXT, UPDATETEXT e WRITETEXT não são válidas contra colunas text, ntext ou image de tabelas inserido ou excluído. Todos os outros usos das colunas text, ntext ou image possuem suporte, por exemplo, seu uso como referência em listas de seleção, critérios de pesquisa com cláusula WHERE ou funções SUBSTRING, PATINDEX ou CHARINDEX. As operações com dados text, ntext ou image nos gatilhos INSTEAD OF são afetadas pela opção atual SET TEXTSIZE. Esse valor pode ser determinado usando-se a função @@TEXTSIZE.
O tipo de dados text, ntext ou image armazenados nas tabelas inserido e excluído varia dependendo da ação do gatilho (INSERT, UPDATE ou DELETE):
Em instruções INSERT, a tabela inserido contém o novo valor para a coluna text, ntext ou image. A tabela excluído não tem nenhuma linha.
Em instruções DELETE, a tabela inserido não tem linhas e as linhas da tabela excluído contêm os valores que a coluna text, ntext ou image tinha antes do início de DELETE.
Em instruções UPDATE nas quais o valor text, ntext ou image não for alterado, as linhas das tabelas inserido e excluído contêm os mesmos valores para a coluna text, ntext ou image.
Em instruções UPDATE nas quais o valor text, ntext ou image for alterado, a tabela excluído contém os valores de dados que existiam antes do início de UPDATE e a tabela inserido contém os dados com qualquer alteração especificada na cláusula SET.
Se uma instrução INSERT, UPDATE ou DELETE alterar muitas linhas com grandes valores text, ntext ou image, pode ser necessário muita memória para manter as cópias dos dados text, ntext ou image nas tabelas inserido e excluído. A cópia de grandes quantidades de dados também pode reduzir o desempenho. As instruções INSERT, UPDATE e DELETE que referenciam exibições ou tabelas que tenham gatilhos INSTEAD Of devem alterar uma linha por vez ou apenas algumas linhas por vez, sempre que possível.