sql - nó de acesso XML SQL 'n' em um loop - CoreDump.pt
nó de acesso XML SQL 'n' em um loop
Eu tenho um sistema de auditoria assíncrona que escrevi para SQL Server, que usa gatilhos para enviar uma mensagem para uma fila Service Broker, que chama um procedimento armazenado para processar a fila e registrar os detalhes.
Tudo funciona perfeitamente, se uma única alteração (uma actualização ou uma eliminação) acontece, usando os seguintes trechos de código: -
Obter mensagem da fila:
Eu, então, armazenar o nome do campo que deseja extrair para o @fieldname variável
Obter o nó que eu quero do XML
Tudo bem, este obtém o valor que eu quero.
No entanto, é possível para nós de várias inserções de estar presente, então eu preciso passar por todos eles.
Acessando o nó Insere específico é bastante simples, os seguintes trabalhos se houver três (ou mais)
Pouco difícil de ver com as caixas de código estreitas, mas se você rolar para a direita, você verá o número entre colchetes perto do final é o número de nó, [1], [2], [3] etc.
Então, logicamente eu só preciso ter uma variável que contém o número de nós inserções e loop-lo: -
@nEntries contém o número correto, para que parte funciona (quando testado de forma independente), porém com a SET @InsertedValue = linha não vai mesmo deixar-me executar o script PROCEDIMENTO ALTER, ele cai com: -
Sobre o conjunto @InsertedValue = linha
I tentou lançar a variável como um inteiro de duas maneiras: -
[XS: inteiro (SQL: variável ( @ nEntradas))]
Que dá o mesmo erro: -
[SQL: variável ( @ nEntradas) fundido como xs: número inteiro]
[Sql: variable ( @ nEntradas) escalado como xs: integer]
Isso me traz de volta
[Sql: variable ( @ nEntradas)] escalado como xs: integer?
Este encontra-se basicamente para mim: -
De acordo com:-
você pode lançar a partir untypedAtomic para decimal e integer é um sub-tipo de decimal.
Então, não tenho certeza por que ele está gemendo sobre isso.
Tentei sem os colchetes: sql: variable ( @ nEntradas)
Isso dá-me
Eu tentei com colchetes extras: [[sql: variable ( @ nEntradas)] escalado como xs: integer]
Eu sabia que não iria funcionar, como eu já tinha descoberto isso criando o sistema em primeiro lugar, mas apenas para cobrir todas as bases Eu tentei usar concatenação
Como esperado, este deu
Eu também tentei usar uma variável: -
E esse é o ponto que eu decidi pedir a ajuda de vocês, bons folks!
Dado que eu estou usando sql: variable bastante sucesso no exato a mesma chamada (a seguir funciona bem, mas só recebe os dados primeiras inserções) ...
... alguém tem alguma idéia que eu tentei não me deixar usar um sql: variável para o número do nó?
Eu também tentei [sql: variable ( @ nEntradas) [1]], apenas no caso de ele pensou @nEntries poderia ter vários valores
Dá nosso velho amigo
Editar Solução: -
Eu criei uma solução onde eu criar uma tabela temporária e inserir uma linha com cada inserções correspondentes e registro Apaga, e depois passo por aquela mesa. Que me permite usar [1] como antes, que funciona muito bem.