Article View: pl.comp.bazy-danych
Article #195615Re: Dziwne zmienne w MS-SQL
From: Adam
Date: Sat, 16 Jun 2018 18:43
Date: Sat, 16 Jun 2018 18:43
48 lines
2806 bytes
2806 bytes
W dniu 2018-06-16 o 20:20, wloochacz pisze: > W dniu 2018-06-15 o 15:29, Adam pisze: >> (...) >> declare @TaBelKa nvarchar(40) >> set @TaBelKa = 'sys.tables' >> DECLARE @SQL NVARCHAR(100) >> SET @SQL = N'SELECT * FROM ' + @TaBelKa >> EXECUTE sp_executesql @SQL > Dlatego, że nazwy tabel i kolumn muszą być statyczne, jeśli zapytanie > jest statyczne - a jest w tym przypadku. > W przypadku dynamicznych nazw tabel lub kolumn należy przekazać cały SQL > w sposób dynamiczny i użyć sp_executesql do jego wykonania. > > Powiedz lepiej co chcesz zrobić. Czy widzisz moją pierwszą odpowiedź dla Kwiatuszka? Zacytuję fragment: Otóż, konstruując większe zapytania i korzystając z konstrukcji SET @SQL = N' to w edytorze Management Studio wszystko po znaku ['] już nie jest kontrolowane względem składni. Rodzi to możliwość popełnienia błędów choćby literowych, a znaleźć taki w większych zapytaniach to problem. > Jeśli chcesz wykonać select z tabeli, którą podasz ze zmiennej - to tak, > właśnie tak to należy zrobić po stronie serwera. > > Ale może lepiej ów string do wykonania przygotować w aplikacji? > >> Ki diabeł? >> O co chodzi? > Takie zasady. > A dodatkowo doczytaj sobie o zmiennych tabelarycznych i skalarnych. > Co prawda, to nie na temat Twojego pytania, ale... warto wiedzieć ;-) Jak być może pamiętasz, od czasu do czasu coś tam dorabiam do programów, o których kiedyś rozmawialiśmy. Istotnie, czasem brakuje mi wiedzy. Nie pamiętam teraz konkretnego przykładu, ale w dużych konstrukcjach z zagnieżdżonymi selectami i z użyciem LEFT JOIN oraz masą warunków zauważyłem, że jeżeli do WHERE ... doda się AND 1=1 (co wydaje się bezsensem), to zapytanie wykonuje się szybciej. -- Pozdrawiam. Adam
Technical Details
Message-ID:
<pg3lob$9tf$1$Adam@news.chmurka.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.ent22.internetdsl.tpnet.pl!not-for-mailReferences:
<pg0f08$vgn$1$Adam@news.chmurka.net> <5b25550e$0$605$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.ent22.internetdsl.tpnet.pl!not-for-mail From: Adam <a.g@poczta.onet.pl> Newsgroups: pl.comp.bazy-danych Subject: Re: Dziwne zmienne w MS-SQL Date: Sat, 16 Jun 2018 20:43:24 +0200 Organization: news.chmurka.net Message-ID: <pg3lob$9tf$1$Adam@news.chmurka.net> References: <pg0f08$vgn$1$Adam@news.chmurka.net> <5b25550e$0$605$65785112@news.neostrada.pl> NNTP-Posting-Host: ent22.internetdsl.tpnet.pl Mime-Version: 1.0 Injection-Date: Sat, 16 Jun 2018 18:43:23 +0000 (UTC) Injection-Info: news.chmurka.net; posting-account="Adam"; posting-host="ent22.internetdsl.tpnet.pl:83.15.205.22"; logging-data="10159"; mail-complaints-to="abuse-news.(at).chmurka.net" User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 In-Reply-To: <5b25550e$0$605$65785112@news.neostrada.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit