Hoi,
Ik zit met een heel vreemd probleem. Ik ben een tijd bezig geweest aan een nieuw deel van een applicatie die we aan het bouwen zijn en daarvoor heb ik een aantal tabellen en views aan de standaard SQL database moeten toevoegen. Nu mijn applicatie zo goed als af is ben ik scripts aan het schrijven die deze tabellen en views aanmaken op de databases van andere collegas en klanten.
Om te testen of ik ook alle tabellen en views gehad heb, heb ik mijn database 'gekopieerd' (backup gemaakt en die daarna restored in een nieuwe database) en daar alle tabellen en views (die ik aangemaakt heb) uitgegooid. Het idee is dat ik mijn scripts nu een keer toepas op deze 'verse' database en dan kan testen of de applicatie nog werkt, zo kan ik dus zien of ik geen view vergeten ben oid.
Nu kom ik echter een vreemd probleem tegen; SQL Server Management Studio wil mijn script dat de views aan moet maken niet runnen.
Elke view (het zijn er een stuk of 8 ) staat natuurlijk nog gewoon in mijn 'oude' database, dus ik heb daar gewoon 'Script View As - CREATE To' gedaan. Dat voor elk van de 8 views, achter elkaar geplakt met GO er tussen, en ik dacht dat dat wel zou werken. Helaas, hij wil niet.
Het vreemde komt nog... Als ik de CREATE VIEW statements een voor een selecteer en run gaan ze allemaal goed (het probleem is dus niet dat een query fout gaat). Echter als ik de hele file tegelijk wil runnen dan krijg ik een hoop errors.
Een deel van mijn file:
Dit zijn twee van de 8 CREATE VIEW queries maar dat doet er verder niet toe, als ik dit deel selecteer en run werkt het ook niet:
Ik dacht dat ik iets fout gedaan had met het GO statement ofzo (heb niet zoveel ervaring met management studio), dus om te testen heb ik in een nieuw query window dit getypt:
En die draait zonder fouten...?
Het enige verschil, voor zover ik kan zien, is dat de achterliggende select query in het eerste geval wat complexer is. Maar zoals ik al zei, de queries zelf, als ik ze een voor een selecteer en run, geven geen problemen en maken netjes de view aan...
Sterker nog: als ik de query die fout gaat copy/paste in een nieuw query window, en het SELECT gedeelte overal vervang door iets simpels (SELECT * FROM FM107 bijv), dan gaat het nog steeds mis!
Ik heb er dit van gemaakt bijvoorbeeld:
Die wil niet, zelfde fout!
NOG sterker: als ik deze kortere query (die dus nog steeds fout gaat) handmatig over typ dan gaat het opeens wel goed!
Het lijkt erop dat er misschien wat rare tekens in de queries zitten ofzo? Maar dat begrijp ik niet, want zoals ik al zei: alle queries apart gaan gewoon goed. Alleen in combinatie met GO ertussen werken ze niet. Tenzij ik ze dus handmatig ga over typen, maar dat gaat me uren kosten, niet te vergeten veel typefouten enzo die misschien niet meteen voor errors zorgen, daar ga ik niet aan beginnen.
Hoe kan dit in godsnaam? Zie ik iets over het hoofd of zit er echt iets goed mis hier?
Kan ik misschien iets gebruiken om 'rare tekens' (null karakters ofzo) weg te filteren?
EDIT
Ik herinner me net dat ik in Notepad++ wel eens vreemde karakters heb gezien zoals null karakters, en dat die vrij duidelijk weergegeven werden met een zwarte achtergrond enzo. Als ik de query in Notepad++ plak dan zie ik echter niks van dat (en bij View - Show Symbols heb ik Show All Symbols (oid) aangevinkt). Voor zover Notepad++ kan zien zitten er dus ook geen vreemde karakters in... Waarom werkt het dan niet?!
Ik zit met een heel vreemd probleem. Ik ben een tijd bezig geweest aan een nieuw deel van een applicatie die we aan het bouwen zijn en daarvoor heb ik een aantal tabellen en views aan de standaard SQL database moeten toevoegen. Nu mijn applicatie zo goed als af is ben ik scripts aan het schrijven die deze tabellen en views aanmaken op de databases van andere collegas en klanten.
Om te testen of ik ook alle tabellen en views gehad heb, heb ik mijn database 'gekopieerd' (backup gemaakt en die daarna restored in een nieuwe database) en daar alle tabellen en views (die ik aangemaakt heb) uitgegooid. Het idee is dat ik mijn scripts nu een keer toepas op deze 'verse' database en dan kan testen of de applicatie nog werkt, zo kan ik dus zien of ik geen view vergeten ben oid.
Nu kom ik echter een vreemd probleem tegen; SQL Server Management Studio wil mijn script dat de views aan moet maken niet runnen.
Elke view (het zijn er een stuk of 8 ) staat natuurlijk nog gewoon in mijn 'oude' database, dus ik heb daar gewoon 'Script View As - CREATE To' gedaan. Dat voor elk van de 8 views, achter elkaar geplakt met GO er tussen, en ik dacht dat dat wel zou werken. Helaas, hij wil niet.
Het vreemde komt nog... Als ik de CREATE VIEW statements een voor een selecteer en run gaan ze allemaal goed (het probleem is dus niet dat een query fout gaat). Echter als ik de hele file tegelijk wil runnen dan krijg ik een hoop errors.
Een deel van mijn file:
SQL:
1
2
3
4
5
| CREATE VIEW [dbo].[vwFT] AS (SELECT FM107.OB001_ID, FM107.FM105_ID, FM105.TOTAL_COSTS + FM107.PTOTAL_COSTS AS FT_TOTALCOSTS, FM105.NOF_HOURS AS FT_HOURS FROM FM107 LEFT OUTER JOIN FM105 ON FM105.FM105_ID = FM107.FM105_ID WHERE KOF_MAINTENANCE = 'FT' ) GO CREATE VIEW [dbo].[vwGAO] AS (SELECT FM107.OB001_ID, FM107.FM105_ID, FM105.TOTAL_COSTS + FM107.PTOTAL_COSTS AS GAO_TOTALCOSTS, FM105.NOF_HOURS AS GAO_HOURS FROM FM107 LEFT OUTER JOIN FM105 ON FM105.FM105_ID = FM107.FM105_ID WHERE KOF_MAINTENANCE = 'GAO' ) GO |
Dit zijn twee van de 8 CREATE VIEW queries maar dat doet er verder niet toe, als ik dit deel selecteer en run werkt het ook niet:
code:
1
2
3
4
5
6
| Msg 102, Level 15, State 1, Procedure vwFT, Line 1 Incorrect syntax near 'GO'. Msg 111, Level 15, State 1, Procedure vwFT, Line 1 'CREATE VIEW' must be the first statement in a query batch. Msg 102, Level 15, State 1, Procedure vwFT, Line 1 Incorrect syntax near 'GO'. |
Ik dacht dat ik iets fout gedaan had met het GO statement ofzo (heb niet zoveel ervaring met management studio), dus om te testen heb ik in een nieuw query window dit getypt:
SQL:
1
2
3
4
5
| CREATE VIEW TEST1 AS (SELECT * FROM FM107) GO CREATE VIEW TEST2 AS (SELECT * FROM FM105) GO |
En die draait zonder fouten...?
Het enige verschil, voor zover ik kan zien, is dat de achterliggende select query in het eerste geval wat complexer is. Maar zoals ik al zei, de queries zelf, als ik ze een voor een selecteer en run, geven geen problemen en maken netjes de view aan...
Sterker nog: als ik de query die fout gaat copy/paste in een nieuw query window, en het SELECT gedeelte overal vervang door iets simpels (SELECT * FROM FM107 bijv), dan gaat het nog steeds mis!
Ik heb er dit van gemaakt bijvoorbeeld:
SQL:
1
2
3
4
5
| CREATE VIEW [dbo].[vwFT] AS (SELECT * FROM FM107) GO CREATE VIEW [dbo].[vwGAO] AS (SELECT * FROM FM107) GO |
Die wil niet, zelfde fout!
NOG sterker: als ik deze kortere query (die dus nog steeds fout gaat) handmatig over typ dan gaat het opeens wel goed!
Het lijkt erop dat er misschien wat rare tekens in de queries zitten ofzo? Maar dat begrijp ik niet, want zoals ik al zei: alle queries apart gaan gewoon goed. Alleen in combinatie met GO ertussen werken ze niet. Tenzij ik ze dus handmatig ga over typen, maar dat gaat me uren kosten, niet te vergeten veel typefouten enzo die misschien niet meteen voor errors zorgen, daar ga ik niet aan beginnen.
Hoe kan dit in godsnaam? Zie ik iets over het hoofd of zit er echt iets goed mis hier?
Kan ik misschien iets gebruiken om 'rare tekens' (null karakters ofzo) weg te filteren?
EDIT
Ik herinner me net dat ik in Notepad++ wel eens vreemde karakters heb gezien zoals null karakters, en dat die vrij duidelijk weergegeven werden met een zwarte achtergrond enzo. Als ik de query in Notepad++ plak dan zie ik echter niks van dat (en bij View - Show Symbols heb ik Show All Symbols (oid) aangevinkt). Voor zover Notepad++ kan zien zitten er dus ook geen vreemde karakters in... Waarom werkt het dan niet?!
[ Voor 12% gewijzigd door NickThissen op 19-08-2011 14:11 ]