13. december 2010 - 16:07Der er
10 kommentarer og 1 løsning
Problemer med Stored Procedure i MSSQL
Jeg har problemer med noget stored procedure lige for tiden.
Jeg har følgende SP: ------------------------ set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SP_AddGroup] @fromdate nvarchar(50)='', @fromtime nvarchar(50)='', @todate nvarchar(50)='', @totime nvarchar(50)='', @gruppenavn nvarchar(50)='', @GruppeNr nvarchar(50)='', @niveau int=0 AS BEGIN IF((SELECT COUNT(*) FROM Gruppe WHERE fromdate = @fromdate AND fromtime = @fromtime AND todate = @todate AND @totime = totime AND gruppenavn = @gruppenavn) > 0) begin INSERT INTO Gruppe (FromDate, FromTime, ToDate, ToTime, Gruppenavn, GruppeNr, Niveau) VALUES (@fromdate, @fromtime, @todate, @totime, @gruppenavn, @GruppeNr, @niveau) end END begin SELECT Gruppe_id FROM Gruppe WHERE fromdate = @fromdate AND fromtime = @fromtime AND todate = @todate AND @totime = totime AND gruppenavn = @gruppenavn end --------------------------
Får jeg følgende fejl Msg 8144, Level 16, State 2, Procedure sp_addgroup, Line 0 Procedure or function sp_addgroup has too many arguments specified.
Tabellen ser sådan ud: ---------------------- USE [Dansupport] GO /****** Object: Table [dbo].[Gruppe] Script Date: 12/13/2010 16:03:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Gruppe]( [Gruppe_id] [int] IDENTITY(1,1) NOT NULL, [Fromdate] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [Fromtime] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [Todate] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [Totime] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [Gruppenavn] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [GruppeNr] [nvarchar](50) COLLATE Danish_Norwegian_CI_AS NOT NULL, [Niveau] [int] NOT NULL, CONSTRAINT [PK_Gruppe] PRIMARY KEY CLUSTERED ( [Gruppe_id] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] ---------------------------
Hvad skal den ekstra Begin End? Jeg tror hvis du fjerner de 2 linier fra din procedurer og først slutter din procedurer af med en enkelt end i slutningen, at det måske virker. ;-)
Tak for jeres svar, jeg vil senere i dag kigge på det og vende tilbage om det er fejlen. Ang. det med dato og tid, så ved jeg godt at det skal være datetime format, var bare lige den nemmeste måde i første omgang, indtil at jeg fik løsningen til at virke :)
GruppeNr er en streng af den grund, at formatet f.eks. er '\2\233\'
Men regner med at vende tilbage kl. 14 med svar på det.
Okay, jeg fandt ud af, at når jeg kaldte min SP, så var det ikke min SP der blev kaldt, men sys.sp_addgroup, som mssql selv har liggende.
Derefter, så ser min SP nu således ud: ------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SP_DSAddGroup] @fromdate nvarchar(50), @fromtime nvarchar(50), @todate nvarchar(50), @totime nvarchar(50), @gruppenavn nvarchar(50), @GruppeNr nvarchar(50), @niveau int=0 AS
BEGIN IF((SELECT COUNT(*) FROM Gruppe WHERE fromdate = @fromdate AND fromtime = @fromtime AND todate = @todate AND @totime = totime AND gruppenavn = @gruppenavn) = 0) BEGIN INSERT INTO Gruppe (FromDate, FromTime, ToDate, ToTime, Gruppenavn, GruppeNr, Niveau) VALUES (@fromdate, @fromtime, @todate, @totime, @gruppenavn, @GruppeNr, @niveau) END BEGIN SELECT Gruppe_id FROM Gruppe WHERE fromdate = @fromdate AND fromtime = @fromtime AND todate = @todate AND @totime = totime AND gruppenavn = @gruppenavn END END -------------
Og min tabel ser stadig ud som tidligere. Dog fandt jeg ud af, at min SP faktisk virker som den skal, om de BEGIN END står rigtigt osv, så virker det uden problemer og det gør som jeg vil have det. Fejlen har bare ligget i, at jeg har kaldt den forkerte SP, som jeg så ikke vidste :/
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.