Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Kolumn som inte finns...

Postades av 2005-02-28 10:02:26 - Marcus Gus, i forum sql-server/msde, Tråden har 8 Kommentarer och lästs av 689 personer

Hej, nu har jag nästa fråga om SQL Server om hur den fungerar. Vi har idag ett antal databaser ute och
inte alla stämmer överens med hur de bör se ut, det är ett pågående jobba att rätta till det men tillsvidare
får vi dras med att vissa databaser inte har alla kolumner (eller har för många!!!). Att söka ut om en kolumn
finns i en databas är ingra problem utan problemet uppstår i IF-satserna som skall köras. Jag tycker att
<code>
IF exists(select sc.* from sysobjects so, syscolumns sc
where so.[name] = 'MinTabell'
and so.[id] = sc.[id]
and sc.[name] = 'MinKolumn')
BEGIN
UPDATE MinTabell
SET MinKolumn_2 = 1
WHERE MinKolumn = 1 or MinKolumn = 3
END
</code>

borde fungera iom att det bara blir sant i de fall som kolumnen finns, men SQL server sparkar bakut direkt på de
databser som inte har MinKolumn i MinTabell och ger felmeddelandet
"Server: Msg 207, Level 16, State 3, Line 1 Invalid column name 'MinKolumn'." vilket iofs är helt korrekt. Men borde det
inte gå att göra ett generellt skript som kan köras på alla varianter av databsen? Jag vet att
<code>
IF exists(select sc.* from sysobjects so, syscolumns sc
where so.[name] = 'MinTabell'
and so.[id] = sc.[id]
and sc.[name] = 'MinKolumn')
BEGIN
execute( N' UPDATE MinTabell
SET MinKolumn_2 = 1
WHERE MinKolumn = 1 or MinKolumn = 3')
END
</code>

fungerar, men helst vill jag slippa att ha execute i skriptet. Samma problem gäller tex "select MinKolumn from MinTabell". Jag tror iofs inte att det finns en annan lösning än att köra execute men vill gärna veta om någon har något uppslag (tex om man kan slå av prekompileringen och optimeringen som görs för en del av skript).


Svara

Sv: Kolumn som inte finns...

Postades av 2005-02-28 11:48:58 - Mikael Johansson

Lägg till en else-händelse så bör det funka.


Svara

Sv:Kolumn som inte finns...

Postades av 2005-02-28 12:38:02 - Marcus Gus

<b>Lägg till en else-händelse så bör det funka.</b>

Hur menar du att det skall få bort felmeddelandet som blir på update-satsen? Det är ju inte if-satsen i sig som det blir fel på utan på update (eller "select minkolumn from mintabbell") när MinKolumn inte finns? Men jag var tvungen att testa och det fungerar inte att bara lägga till en "else" sats.


Svara

Sv: Kolumn som inte finns...

Postades av 2005-02-28 12:56:31 - Mikael Johansson

IF exists(select sc.role ...)
blablabla
kör update
Else
Gör något annat.


Svara

Sv: Kolumn som inte finns...

Postades av 2005-03-01 07:49:57 - Jenny Månsson

Du har inte kollat att fältet
MinKolumn_2
finns som du försöker ändra värde på.
Du kollar endast efter fältet
MinKolumn


Svara

Sv:Kolumn som inte finns...

Postades av 2005-03-01 13:11:11 - Marcus Gus

<b>Du har inte kollat att fältet MinKolumn_2 finns</b>

Oki, jag kanske är extremt otydlig med vad jag vill. MinKolumn_2 finns alltid i alla databser däremot innehåller bara en del databser kolumnen MinKolumn. Jag antar att när servern försöker optimera sql-satserna innan de körs så smäller den på update (kan lika gärna vara "select MinKolumn from MinTabell") iom att inte MinKolumn finns. Att satsen inte körs på databser som saknar MinKolumn tas ju omhand av IF-satsen så den kommer överhuvudtaget aldrig att köras på dem, däremot kommer ju servern att försöka optimera de sqlsatser som finns innan den körs och då visar den fel på updatesatsen (eller tex "select MinKolumn from MinTabell").

Att den visar fel kan jag faktiskt förstå men vad jag är ute efter är att veta om det går att undanta vissa delar av sqlkoden från optimering, pre-kompliering mm, går att fånga felmeddelandet och gömma det från dem som kör det eller på något annat sätt undvika felmeddelandet UTAN att använda Execute metoden.

Hans Sjödins förslag trodde jag inte på men var ändå tvungen att testa. Kan inte förstå hur en else
sats skulle påverka det som sker.

Skälet till att jag vill dölja felmeddelandet är att de rackarns DBA-erna i Frankrike, Schweiz mm blir så nervösa när det ploppar upp ett meddelande som säger "Server: Msg 207, Level 16, State 3, Line 1 Invalid column name 'MinKolumn'." och då ringer dem supporten eller ännu värre mig... ;-)

Även om felmedelandet syns hos dem som saknar kolumen så körs hela scriptet. Ett sätt att undvika felmedelandet har jag visat på ovan, men finns det mer eller bättre sätt?


Svara

Sv: Kolumn som inte finns...

Postades av 2005-03-01 23:14:15 - Christoffer Hedgate

Du har rätt i att du måste använda EXECUTE, alternativt sp_executesql förstås. När proceduren parsas så kontrolleras att kolumnen finns, vare sig just den raden körs eller ej i slutänden.


Svara

Sv:Kolumn som inte finns...

Postades av 2005-03-03 15:32:33 - Marcus Gus

Tack för svaren. Min undran var egentligen om det gick att lösa på ett annat sätt än executemetoden eller undertrycka det felmeddelande som uppstår. Jag markerar denna som löst nu.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
574
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies