Poskládání názvu sloupce ze "stringů"   otázka

SQL

Dobrý den,

píšu jednu složitější proceduru v T-SQL a ubyla by mi spousta CASEů a IFů, kdybych mohl v proceduře poskládat název sloupce z proměnné a kusu textu.

Moje představa je něco v tomto smyslu:

SELECT (@PromennaText + 'ZbytekNazvuSloupce') FROM blablabla

Pokud něco takového lze, mohl by mne prosím někdo nasměrovat, pod čím hledat? Takto dostanu místo názvu sloupce samozřejmě pouze text a skončí to s chybou... Lze nějak říci SQL SERVERU, že to v závorce je název sloupce?

Předem díky

Jakub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud potřebujete dělat tohle, tak to typicky znamená, že máte špatně navržené schéma databáze.

V první řadě bych tedy doporučil, pokud je to možné, popsat, kde konkrétně to používáte, co za sloupce má ta tabulka, a zvážit, jestli by se schéma nedalo změnit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Také jsem si říkal, že by se to dalo vyřešit jiným návrhem, ale nic lepšího jsem nevymyslel... Zkusím to popsat na trochu zjednodušeném případě, než je ten můj, aby se dal problém lépe pochopit.

Mám x odběratelů po celé ČR a každý odebírá x různých typů zboží.U každého odběratele je na každý typ zboží nastavena jiná marže (mám tedy sloupce ála "TypZbožíAMarže","TypZbožíBMarže" atd.., každé zboží ale chodí z jiné části republiky, takže pro "zboží A" může být doprava do Brna jiná než pro "zboží B" a zároveň může být cena za dopravu "zboží A" do Brna jiná, než do Prahy (mám tedy sloupce "TypZbožíADoprava", TypZbožíBDoprava" atd..

Věcí, které takto ovlivňují cenu je víc..

Když pak chci ukázat cenu, existují navíc různé typy (způsoby) výpočtů (podle odběrů v předchozím měsíci a další věcí). Typ výpočtu vkládám jako proměnou do procedury a těch typů není moc, takže není problém na ně použít CASE nebo IF.

Problém je v tom, že v každém bloku CASE WHEN nebo IF, bych měl 15krát další CASE nebo IF, abych rozlišil jaké sloupce (TypZbožíADoprava nebo TypZbožíBDoprava; TypZbožíAMarže nebo TypZbožíZMarže....) pro výrobek typu A nebo typu B použít...

Proto jsem myslel, že by mi ulehčilo práci, kdybych tam měl např ('TypZboží' + @TypZboží + 'Doprava') jako název sloupce.

Díky za Váš čas a případné nápady na změnu návrhu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proč to něřešíte relačníma tabulkama. Např.

1. tab. Odběratel

2. tab. Typ zboží

3. tab. Zboží - relace typ zboží

4. tab. Dodací místo (info o místu původu)

5. tab. Marže - (Relace Odběratel - typ. zboží) = marže

6. tab. Doprava - (Relace Zboží - Dodací místo) = cena

atd.

Potom dokážete cenu jednoduše spočítat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak už tu bylo řečeno, toto řešení znamená většinou špatný návrh databáze. Ospravedlnění pro tento design je pouze nějaké konkrétní řešení problémů - tedy například výkon. Takže doporučuji předělat strukturu. Obecně SQL Server nepočítá s tímto způsobem použití a proto je lepší tyto problémy řešit na klientovi. Ačkoliv máte možnost využití kontingenčních tabulek (příkaz PIVOT/UNPIVOT).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpovědi, zkusím tedy DB překopat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback