Pominięcie null przy sumowaniu varcharów.

0

Hej,

Muszę wygenerować dane faktur.
Mam Bardzo długą funkcję sumującą zmienne typu varchar/nvarchar w jedną. (@return = @string1 + @string2 + @string3...).

Mam koło setki zmiennych i każda ma postać concat(@string1, '') lub ISNULL(@string1, '') na wypadek pojawienia się nulla.

Czy nie da się wyeliminować funkcji concat/isnull tak, żeby jeżeli w ciągu kolejnych varcharów funkcja napotka nulla to po prostu go oleje? Kod wygląda wręcz paskudnie i mało czytelnie, gdy każda zmienna i każdy case jest w nawiasie jako parametr concata/isnulla.

0

Osobiście nigdy bym nie pisał ambitnych algorytmów wykańczających dane w SQL, tylko na kliencie - który i tak będzie użyty, i tak.

ps. a "setka zmiennych" to naprawdę źle pachnie. Problem projektowy?

0

@AnyKtokolwiek: Źle się wyraziłem. To dane wyciągane z bazy typu client.name, client.age, a nie tworzone zmienne @. Optymalizacja starych funkcji programowych :P Nie da się jakoś oczyścić kodu? Nic mi nie przychodzi do głowy.

0

Napisałem na szybko w celu zobrazowania. Mam coś takiego:

Przechwytywanie.PNG

Jest możliwość usunąć concaty jakąś jedną komendą, żeby w przypadku napotkania nulla nie wywalał mi się cały string? W sensie wprowadzić jakąś komendę, żeby kod był krótszy, czystszy i czytelniejszy, a jednocześnie bezpieczny?

Funkcja ogólnie zwraca zsumowaną wartość wszystkich sprawozdań do pliku i system informatyczny go wtedy mieli. I chodzi mi tylko o concaty, bo to, co przesłałem to tylko do zobrazowania. :p

1

To co pokazujesz nie ma sensu skoro używasz concat to nie potrzebujesz +:

Concat(col1,', ', col2,', ', col3,', ')

Funkcja concat przyjmuje N argumentów i zamienia nulle na pustu ciąg.

Ewentualnie https://docs.microsoft.com/en-us/sql/t-sql/statements/set-concat-null-yields-null-transact-sql?view=sql-server-ver15

Ale to jest depraced

0

@nano50:

utwierdziłem się w przekonaniu, że to architektura DDD *1) *

Ów "system informatyczny" w dowolnym języku o wiele lepiej sobie poradzi z tym pod każdym względem (choćby ze wstawianiem przecinka).
Będzie o wiele bardziej elastyczny na przeróbki i pod każdym innym względem.

1) Do D Design

0

@Panczo: Dzięki. Oryginalna funkcja jest dość zawiła i ma tyle komentarzy, że zupełnie tego nie dostrzegłem. Dziękuję za koncepcję! :)

0

coalesce()

1 użytkowników online, w tym zalogowanych: 0, gości: 1