Pergunta 1: Como os 8000 caracteres entram em cena e onde devo estar ciente disso?
Definir n como 8000 faz com que 8000 caracteres entrem em jogo. Você precisa estar ciente das referências de precisão, escala e comprimento (Transact-SQL) sobre char, nchar, nvarchar e varchar. Por outro lado, definir n como max (sem aspas) faz com que o SQL Server armazene (e retorne) o número máximo de bytes (conforme mencionado em sua cotação).
Pergunta 2: uma consulta ao datar .net nesta coluna sempre retornará o resultado completo com mais de 100.000 caracteres?
Esta é uma pergunta .Net (não um SQL Server), mas o datareader .Net busca um fluxo de bytes. Um byte não é um caractere e o SQL Server retorna bytes (não caracteres). Se n estiver definido como 8000 e o tipo de dados for nvarchar, o SQL Server retornará até 8000 bytes, que o datareader .Net pode interpretar como 4000 caracteres Unicode. Se n estiver definido como 8000 e o tipo de dados for varchar, o SQL Server retornará até 8000 bytes, que o datareader .Net pode interpretar como tendo até 8000 caracteres ANSI. Se n estiver definido como max e o tipo de dados for nvarchar, o SQL Server retornará até 2 ^ 31-1 bytes, que o datareader .Net pode interpretar com até (2 ^ 31-1) / 2 caracteres. Se n for definido como max e o tipo de dados for varchar, o SQL Server retornará até 2 ^ 31-1 bytes, que o datareader .Net pode interpretar com até 2 ^ 31-1 caracteres ANSI.
Se você optar por usar char ou varchar (em vez de nchar ou nvarchar) porque eles podem armazenar mais "caracteres" (com mais precisão: bytes), você deve estar ciente de que muitos caracteres Unicode não possuem caractere ANSI equivalente (portanto, uma grande parte de nossos os usuários do mundo não conseguirão ver seus caracteres nativos / localizados no seu aplicativo).
varchar(max)
uma vez foi chamadotext
e foi tratado como um tipo de dados diferente.