sp_add_jobstep está bem documentado aqui . Eu entendo que o parâmetro @command
é type NVARCHAR(MAX)
.
Estou criando um trabalho do SQL Agent usando um procedimento armazenado. Passando o valor do @command
parâmetro por meio de uma variável. Estou ficando truncado em 4000 caracteres.
Minha variável também é declarada como NVARCHAR(MAX)
Alguma solução alternativa para adicionar mais de 4000 caracteres no @command
parâmetro?
'This'
é umavarchar
corda.N'This'
é umanvarchar
corda.Acho que, depois
@tblUpdateStats_List
de , o restante de sua string tinha mais de 4.000 caracteres.Fiz alguns experimentos (no SQL 2016) e parece que quando uma
varchar
string é convertida implicitamente paranvarchar
, ela é convertida paranvarchar(4000)
, nãonvarchar(MAX)
.Executei a seguinte consulta:
Com
<literal>
inicialmente sendo uma string nvarchar construída da seguinte forma:Essa string tinha 4.138 caracteres (no Windows, onde EOL é CR+LF), então o comprimento total da string deveria ser 3 + 7000 + 4138 + 3, ou 11.144 caracteres
Quando executado com o literal como uma
nvarchar
string, obtive os seguintes resultados:Portanto, comprimento correto e valores esperados no final da string replicada, no início do literal e no final do literal.
Então, mudei o literal para uma
varchar
string e obtive isso:Portanto, length mostra 3 + 7000 + 4000 + 3 = 11006 - o que esperaríamos se o valor varchar fosse truncado para apenas 4.000 caracteres. E, não vemos
XXX
antes da finalQQQ
, também como seria de esperar nestas circunstâncias.FYI - Se eu for literal para , meus resultados voltaram para os primeiros, então um cast explícito evita esse problema
CAST
.varchar
nvarchar(MAX)
Eu tive que adicionar
N
antes de cada terminação de string. O que quero dizer com isso?Antes eu não tinha
N
depois@dbName
e@tblUpdateStats_List
variáveis.Adicionado
N
depois@dbName
e@tblUpdateStats_List
agora posso passar mais de 4000 caracteres para@command
parâmetro.