SQL Server-Skript: ALTER PROCEDURE - Ausführung mehrerer ALTER PROCEDURE-Anweisung in einem Skript, ohne zu wählen jedes ALTER-eine nach der anderen
Ich weiß, das ist kein großes Problem, aber es juckt mich trotzdem.
- Ich habe einen SQL Server 2005-script zum erstellen neuer Daten-Tabellen, Einschränkungen, änderung einiger Tabellen hinzufügen von Spalten, änderung der Verfahren zu nehmen Sie die änderungen an den Tabellen berücksichtigt, etc.
- Alles läuft wunderbar, bis das Skript auf mein ALTER PROCEDURE-Anweisungen.
- Die Fehlermeldung ist wie folgt:
"Msg 156, Level 15, Status 1, Prozedur
cpromo_Get_ConsultDetails_Promotionban,
Linie 59 Falsche syntax in der Nähe des
Stichwort 'PROZEDUR'.
Hier ist ein Beispiel mein script:
ALTER PROCEDURE [dbo].[cpromo_Get_ConsultDetails_PromotionBan]
(
@idPromoBan int,
@uid int
)
AS
begin
set nocount on;
/* 1- detail de la promo */
SELECT p.[nopromo], p.[StartDate], p.[EndDate], p.[DateText]
FROM [cpromo_PromotionBanniere] as pb
INNER JOIN [cpromo_Promotions] as p ON p.[idPromo] = pb.[idPromo]
WHERE (pb.[idPromoBan] = @idPromoBan)
/* 2 - cartes de la promo */
SELECT pis.[idCardText], ct.[nom], ct.[descr], ct.[prix], ct.[prixCoupon], ct.[qtyItem], i.[Impact]
FROM [cpromo_PromotionsItems] as pis
INNER JOIN [cpromo_Impacts] as i ON i.[idImpact] = pis.[idImpact]
INNER JOIN [cpromo_CardText] as ct ON ct.[idCardText] = pis.[idCardText]
WHERE (pis.[idPromoBan] = @idPromoBan)
ORDER BY i.[iorder], ct.[nom];
/* 3 - pvedettes opti */
SELECT m.[idCardText], m.[qtyCardL], m.[qtyCardM], m.[qtyCardMG], m.[qtyCardS],
ISNULL(m.[qtyCardMini], 0) as qtyCardMini,
ISNULL(m.[qtyCardMiniPTJ], 0) as qtyCardMiniPTJ
FROM [cpromo_MEMCards] as m
INNER JOIN [cpromo_CardText] as ct ON ct.[idCardText] = m.[idCardText]
WHERE (m.[idPromoBan] = @idPromoBan)
ORDER BY ct.[nom];
/* 4 - cart */
SELECT [idCartEl], [idCardText], [qtyL], [qtyM], [qtyMG], [qtyS],
ISNULL([qtyMini], 0) as qtyMini,
ISNULL([qtyMiniPTJ], 0) as qtyMiniPTJ
FROM [cpromo_UserCarts]
WHERE ([uid] = @uid AND [idPromoBan] = @idPromoBan);
end
ALTER PROCEDURE [dbo].[cpromo_Get_CartItems_ByPromotionBan]
(
@uid int,
@idPromoBan int
)
AS
begin
set nocount on;
SELECT ct.nom, ct.descr, p.DateText, ct.prix, ct.prixCoupon, ct.qtyItem,
uc.qtyL, uc.qtyM, uc.qtyMG, uc.qtyS,
isnull(uc.qtyMini, 0) as qtyMini,
isnull(uc.qtyMiniPTJ, 0) as qtyMiniPTJ, 3 as qteLimite
FROM cpromo_UserCarts as uc
INNER JOIN cpromo_CardText as ct ON ct.idCardText = uc.idCardText
INNER JOIN cpromo_PromotionBanniere as pb ON pb.idPromoBan = uc.idPromoBan
INNER JOIN cpromo_Promotions as p ON p.idPromo = pb.idPromo
WHERE (uc.uid = @uid) AND (uc.idPromoBan = @idPromoBan);
end
Den Fehler-Punkte in Richtung der ersten 'end' Schlüsselwort begegnet werden, wenn doppelt geklickt. Was ich nicht verstehe, ist wenn Sie eine ALTER-Anweisung nach der anderen, es läuft einfach gut und glatt! Wenn ich versuche, Sie laufen alle durch drücken der Taste [F5] keine Auswahl, es gibt mir die Fehlermeldung.
Versuchte ich Sie zum einbetten des ALTER-Anweisungen in ein anderes BEGIN...END, aber kein Glück, es sagt, dass es ein syntax Fehler in der Nähe des Schlüsselwortes ÄNDERN...
EDIT: Kann es sein, weil ich kommentieren die änderungen, die ausgeführt werden, nachdem der begin-Anweisung?
ALTER PROCEDURE [dbo].[cpromo_Get_ConsultDetails_PromotionBan]
(
@idPromoBan int,
@uid int
)
AS
begin
------------------
-- Added column to take table changes into account blah blah blah...
------------------
set nocount on;
/* 1- detail de la promo */
SELECT p.[nopromo], p.[StartDate], p.[EndDate], p.[DateText]
FROM [cpromo_PromotionBanniere] as pb
INNER JOIN [cpromo_Promotions] as p ON p.[idPromo] = pb.[idPromo]
WHERE (pb.[idPromoBan] = @idPromoBan)
/* 2 - cartes de la promo */
SELECT pis.[idCardText], ct.[nom], ct.[descr], ct.[prix], ct.[prixCoupon], ct.[qtyItem], i.[Impact]
FROM [cpromo_PromotionsItems] as pis
INNER JOIN [cpromo_Impacts] as i ON i.[idImpact] = pis.[idImpact]
INNER JOIN [cpromo_CardText] as ct ON ct.[idCardText] = pis.[idCardText]
WHERE (pis.[idPromoBan] = @idPromoBan)
ORDER BY i.[iorder], ct.[nom];
/* 3 - pvedettes opti */
SELECT m.[idCardText], m.[qtyCardL], m.[qtyCardM], m.[qtyCardMG], m.[qtyCardS],
ISNULL(m.[qtyCardMini], 0) as qtyCardMini,
ISNULL(m.[qtyCardMiniPTJ], 0) as qtyCardMiniPTJ
FROM [cpromo_MEMCards] as m
INNER JOIN [cpromo_CardText] as ct ON ct.[idCardText] = m.[idCardText]
WHERE (m.[idPromoBan] = @idPromoBan)
ORDER BY ct.[nom];
/* 4 - cart */
SELECT [idCartEl], [idCardText], [qtyL], [qtyM], [qtyMG], [qtyS],
ISNULL([qtyMini], 0) as qtyMini,
ISNULL([qtyMiniPTJ], 0) as qtyMiniPTJ
FROM [cpromo_UserCarts]
WHERE ([uid] = @uid AND [idPromoBan] = @idPromoBan);
end
Danke für jede Hilfe oder jeden Hinweis.
Ich habe versucht, das entfernen Sie alle Parameter der Klammer wie vorgeschlagen, von einem anderen Programmierer hier (die, die ich bedauere, nicht ta hatte das mal zu merken sein name), aber immer noch die Fehlermeldung Msg 156, Level 15, Status 1, Prozedur cpromo_Get_ConsultDetails_Promotionban, Linie 59 Falsche syntax bei das Schlüsselwort 'ALTER'. Es ist Punkte die mich beim ersten "end" - Schlüsselwort ein, wenn ich ein Doppelklick darauf.
Soll ich erwägen, es zu sagen, dass habe ich kopiert und eingefügt die generierte ALTER PROCEDURE-Skript für jedes der Verfahren eine unter dem anderen?
Ich weiß, es ist lang und nicht sehr lustig zu Lesen. Tut mir Leid. Dieses Projekt ist auf einer client-Website, wo ich nicht viel Unterstützung von der internen Programmierer-team.
Gut, es gelang mir lösen meine syntax-Fehler. Ich danke Euch allen für die Antwort ich werde Sie als die richtigen Lösungen. Es ist alles deine Antwort.
InformationsquelleAutor Will Marcouiller | 2009-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
einfügen "gehen," zwischen alter statemnts
InformationsquelleAutor Matt Wrock
Diese Antwort ist nicht von mir, wie es ist das Ergebnis von all den Antworten, die ich erhalten habe. Jede Antwort ist ein Teil der Lösung, so wollte ich eine Antwort mit allen Punkten der Lösung.
Hoffe, dies hilft jemand eines Tages.
Danke an alle, die credits gehen an Euch alle!
InformationsquelleAutor Will Marcouiller
Setzen Sie einen GEHEN nach Ihrem ersten ALTER PROCEDURE BEGIN ... END
Sie haben keine BEGIN ... END in diesen Statements?
Ich schließlich nicht alle BEGIN...END-Anweisungen innerhalb der ALTER PROCEDURE-Anweisungen selbst.
InformationsquelleAutor bleeeah
Hinzufügen
go
- Anweisung nach jedemend
procedure-Anweisung.go
"Signalisiert das Ende eines Batches von Transact-SQL-Anweisungen an die SQL Server-Dienstprogramme." (http://msdn.microsoft.com/en-us/library/ms188037.aspx).InformationsquelleAutor Ian Kemp
Ich Stimme mit der go-Anweisungen - aber vielleicht sind die Klammern um die Parameter sind, was die syntax-Fehler? Hier ist, was mein team nutzt...
Ich werde es trotzdem versuchen. Danke!
Hier die Fehlermeldung die ich bekomme, beim entfernen des begin...end-Anweisungen: Ein schwerwiegender Skriptfehler aufgetreten ist. Falsche syntax aufgetreten beim Parsen GEHEN.
Die einzige andere Sache, die ich normalerweise nicht sehen, sind die Semikolons am Ende einige deiner Aussagen. Vielleicht diejenigen, die verhindern, dass der code zwischen den und der GO interpretiert wird als ein einziger block?
Ich habe entfernen Sie die Semikolons und immer noch der Fehler besteht weiterhin. Ich werde versuchen, entfernen Sie alle unsichtbaren Zeichen wie vorgeschlagen von Arvo. Wir wissen nie,! Vielen Dank für Ihre Zeit und überlegung die Beantwortung meiner Frage.
InformationsquelleAutor Mayo
Müssen Sie möglicherweise einige unsichtbare Zeichen (nbspace zum Beispiel) in der white-space-Bereich zwischen dem ersten und zweiten Verfahren. Entfernen Sie alles, was zwischen Ende und die anschließende alter (inklusive Zeilenumbrüche - was in der endALTER), dann legen Sie einige Zeilenumbrüche zurück und schreiben GEHEN Sie auf eine Zeile.
Ich gesehen habe, persönlich nach dem kopieren einige Beispiel-code aus dem net 🙂
Dies löste einen Teil von meinem problem, als die Anzahl der gemeldeten Fehler dramatisch gesunken, was nicht dramatisch ist! 😉 Danke!
InformationsquelleAutor Arvo