SQL Server Management Studio wil query niet accepteren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
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:
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 ]

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Doe ze eens apart in plaats van allebei tegelijk? Regel 4 van je foutmelding lijkt me redelijk duidelijk. ;)

[ Voor 37% gewijzigd door NMe op 19-08-2011 14:26 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Zoals ik al zei, dat werkt prima. Als ik ze gewoon een voor een selecteer en dan run (of in een apart query venster plak en dan run) dan krijg ik geen errors, de views worden netjes aangemaakt.
Zodra ik er GO tussen plak en er twee (of meer) tegelijk wil runnen gaat het mis. Ik heb de views natuurlijk weer verwijderd nadat ik ze succesvol een voor een had aangemaakt (maar als ik dat niet doe krijg ik sowieso een andere error, namelijk dat de view al bestaat).

Echter als ik ze handmatig over typ, letter voor letter exact hetzelfde, dan werken ze wel. De enige fout die ik dus kan bedenken is dat er karakters tussen staan die ik niet kan zien (en dus niet over typ) en die op een of andere manier het uitvoeren van meerdere queries fout laten gaan (aangezien ze een voor een wel werken).

Zoals ik ook al aangaf heb ik de hele SELECT gedeeltes vervangen door heel simpel SELECT * FROM FM107 (puur om te testen), en dat gaat ook fout. Als het dus inderdaad onzichtbare karakters zijn zitten ze ergens bij de CREATE VIEW ... AS gedeelte, of achter / voor de queries zelf.

Nu heb ik met Notepad++ alle onnodige whitespace verwijderd, en alle CREATE VIEW ... AS vervangen door, ja... hetzelfde eigenlijk (met Find & Replace, waar ik bij Replace handmatig CREATE VIEW intyp), maar dat heeft ook geen zin gehad...

Ik ben ten einde raad.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
NMe schreef op vrijdag 19 augustus 2011 @ 14:25:
Regel 4 van je foutmelding lijkt me redelijk duidelijk. ;)
Vandaar dat ik ook dacht dat ik GO fout gebruikte. Dus heb ik als test twee test views aangemaakt in EXACT dezelfde syntax:
SQL:
1
2
3
4
5
CREATE VIEW TEST AS (SELECT * FROM FM107)
GO

CREATE VIEW TEST2 AS (SELECT * FROM FM107)
GO

Werkt prima. Dus de syntax is juist.


Het IS toch ook het eerste statement? GO begint toch een nieuwe batch? Verder staat er niks, dus CREATE VIEW is elke keer het eerste statement.

Mijn test geeft dit ook aan, daar doe ik toch ook gewoon 2 CREATE VIEWS met een GO er tussen, waarom werkt die dan wel?

[ Voor 23% gewijzigd door NickThissen op 19-08-2011 14:34 ]

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Check in SSMS tools --> options --> Query Execution --> batch seperator = go.

In heb deze namelijk bij een aantal installaties leeg zien staan en dat herkent SSMS 'GO' niet aangezien het geen officieel T-SQL statement is.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • eBoR
  • Registratie: April 2011
  • Laatst online: 10-09 20:09
gooi er eens een punt comma achter elke create

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Niemand_Anders schreef op vrijdag 19 augustus 2011 @ 14:35:
Check in SSMS tools --> options --> Query Execution --> batch seperator = go.

In heb deze namelijk bij een aantal installaties leeg zien staan en dat herkent SSMS 'GO' niet aangezien het geen officieel T-SQL statement is.
Kwam ik toevallig tegen, en er staat gewoon GO.
eBoR schreef op vrijdag 19 augustus 2011 @ 14:38:
gooi er eens een punt comma achter elke create
No luck.


Deze dingen KUNNEN gewoon niet de oorzaak zijn, want als ik de queries over typ werken ze wel!!!

Zie hier het bewijs. Twee query windows open, exact dezelfde query voor zover ik kan zien (niet gecopy/paste maar over getypt van elkaar), eentje werkt wel, de andere niet. Beide werken op dezelfde database.
Afbeeldingslocatie: http://i54.tinypic.com/e5r3vo.png

8)7 8)7 8)7

De error heeft het over TEST3 op Line 1 en zegt dat CREATE VIEW de eerste statement moet zijn. Hij staat op de eerste regel, hoe kan het dan ooit NIET het eerste statement zijn?!

[ Voor 8% gewijzigd door NickThissen op 19-08-2011 14:43 ]

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 14-09 15:54
je voert ze wel op de juiste database uit?eventueel beginnen met een use [DB] commando, je hebt geen stukken tekst geselecteerd?want dan voert hij alleen dat uit.....

bij mij doen beide queries het en ik zie ook geen fouten dus daar kan het niet aan liggen....

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
coldasice schreef op vrijdag 19 augustus 2011 @ 14:52:
je voert ze wel op de juiste database uit?eventueel beginnen met een use [DB] commando, je hebt geen stukken tekst geselecteerd?want dan voert hij alleen dat uit.....

bij mij doen beide queries het en ik zie ook geen fouten dus daar kan het niet aan liggen....
Juiste database, niks geselecteerd (of alles geselecteerd).

Dat hij het bij jou doet zou nog steeds aan kunnen geven dat er rare tekens instaan, die komen misschien niet in de browser als ik de query post, of ze kopieren niet mee vanuit de browser in jou SSMS. Als ik de query van venster naar venster kopieer gaan ze wel mee (de query werkt dan in ieder geval nog steeds niet).

Ik heb een simpele query als sql bestand geupload, misschien kan iemand even verifieren of die het wel of niet doet? Bij mij niet namelijk. Natuurlijk wel eerst even TEST_TABLE aanmaken.
http://www.nickthissen.nl/Files/query.zip

[ Voor 6% gewijzigd door NickThissen op 19-08-2011 15:05 ]

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • coldasice
  • Registratie: September 2000
  • Laatst online: 14-09 15:54
getest en ik krijg dezelfde foutmelding, als ik alles copieer in notepad en zet het lettertype om, blijft het probleem bestaan, als ik het copieer naar word en zet hem om naar een ander lettertype is het weg..... 8)7

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
coldasice schreef op vrijdag 19 augustus 2011 @ 15:26:
getest en ik krijg dezelfde foutmelding, als ik alles copieer in notepad en zet het lettertype om, blijft het probleem bestaan, als ik het copieer naar word en zet hem om naar een ander lettertype is het weg..... 8)7
Vaaag 8)7 Maar wel een goeie tip, plakken in word, font veranderen en weer terug helpt bij mij ook :D Nou ja, ik heb de file nu in ieder geval werkend dus, maar ik snap nog steeds niet hoe dit kan... |:(

Mijn iRacing profiel

Pagina: 1