Pergunta

Recebo alguns argumentos em um procedimento armazenado. Estes argumentos são NVARCHAR de.

Eu tenho um problema, quando eu preciso lançar alguns desses valores para carros alegóricos, porque eles estão sendo recebidos como exemplo.

@ VALUE1 NVARCHAR (100)

@ChangedValue DECLARE SET @ChangedValue = CAST (@ Value1 como float)

por exemplo. @ Value1 = "0001"

Dá-me um problema, uma vez que espera que "0.001"

Eu não posso mudar o formato da entrada, mas eu de alguma forma pode alterá-lo no lado do servidor SQL? Ao mudar tudo "" para "". em vez disso?

Com os melhores cumprimentos, Kenn

Foi útil?

Solução

Você pode usar @VALUE1 = REPLACE(@VALUE1, ',', '.')

Esta parece uma coisa horrível de fazer embora!

Outras dicas

Como Mitch disse que não soa tão bom e seria muito melhor que o parâmetro fornecido era do tipo float em primeiro lugar. Ele deu-lhe a solução que resolve o seu problema para agora, mas como ele salientou você pode entrar em alguns problemas no futuro.

Eu assumo que o procedimento é chamado por alguns código do aplicativo, e eu suspeito que esses números são a entrada do usuário. Se for esse o caso, então a conversão deve acontecer no nível de aplicação como que iria cuidar de configurações locais e que é o único lugar que tem o controle sobre o formato da entrada do usuário.

Eu não estou familiarizado com os seus dados, mas certifique-se de que você não tem quaisquer valores que são válidos com uma vírgula, como 1.000. Mudar isso a 1,000 usando substituir mudanças o número real envolvido drasticamente.

Gostaria de corrigir a interface do usuário para que os números inválidos não pode ser colocado no campo. Também gostaria de colocar uma restrição na tabela no banco de dados que requer o número de estar dentro de um determinado intervalo ou um número válido uma vez que você tem os dados limpo. Que os dados forma ruim não pode entrar no campo para começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top