Avatar billede rust10 Nybegynder
28. marts 2004 - 18:00 Der er 6 kommentarer og
1 løsning

output parameter i sp

Vi har en tabel der ser sådan ud:

CREATE TABLE [dbo].[tblBugs] (
    [BugID] [int] IDENTITY (1, 1) NOT NULL ,
    [BugTypeID] [int] NOT NULL ,
    [BugDescription] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [BugDescReply] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [BugStatusID] [int] NOT NULL ,
    [BugReportDate] [smalldatetime] NOT NULL,
    [BugFixedDate] [smalldatetime] NULL,
    [BugHandlerID] [int] NULL ,
    [ProjectID] [int] NOT NULL,
    [CustomerID] [int] NOT NULL,
    [BugAttachmentCount] [int] NOT NULL
)

En SP der ser sådan ud:

CREATE PROCEDURE addBug (@buggID int out,@BugTypeID integer, @BugDescription text, @BugDescReply text, @BugStatusID integer, @BugReportDate smalldatetime, @BugFixedDate smalldatetime, @BughandlerID integer, @ProjectID integer, @CustomerID integer, @BugAttachmentCount integer)
AS
INSERT INTO tblBugs (BugTypeID, BugDescription, BugDescReply, BugStatusID, BugReportDate, BugFixedDate, BughandlerID, ProjectID, CustomerID, BugAttachmentCount)VALUES(@BugTypeID, @BugDescription, @BugDescReply, @BugStatusID, @BugReportDate, @BugFixedDate, @BughandlerID, @ProjectID, @CustomerID, @BugAttachmentCount)
SELECT @buggID= [BugID] FROM [dbo].[tblBugs] WHERE [BugID] = SCOPE_IDENTITY()
GO

Og når jeg skriver dette:
exec addBug '1', 'test24242', 'null', '1', '1999-01-01 22:59:59.997', null, '1', '1', '1',' 0'

Siger SQL det her:
Server: Msg 8114, Level 16, State 4, Procedure addBug, Line 0
Error converting data type varchar to int.

Hvad er det jeg ikke fatter? Jeg vil gerne have det BugID nummer tilbage som blev oprettet med denne bug.
Avatar billede trer Nybegynder
28. marts 2004 - 18:09 #1
Du har anden parameter @BugTypeID integer og du angiver 'test24242' som data. Det kan ikke konverteres.

hvis du vil have data retur i output skal du angive OUTPUT efter parametren i kaldet - og input skal være en variabel.
Avatar billede rust10 Nybegynder
28. marts 2004 - 18:13 #2
bare ændre out med OUTPUT? For det giver samme fejl.

Mener du at man kun kan have 1 input parameter hvis man også har en output parameter?
Avatar billede trer Nybegynder
28. marts 2004 - 18:51 #3
Fejlen skyldes at man ikke kan konvertere tekststrengen 'test24242' til et tal.
Avatar billede rust10 Nybegynder
28. marts 2004 - 18:52 #4
tja nu fjernede vi bare alt der havde med den output parameter at gøre og endte med:

CREATE PROCEDURE addBug (@BugTypeID integer, @BugDescription text, @BugDescReply text, @BugStatusID integer, @BugReportDate smalldatetime, @BugFixedDate smalldatetime, @BughandlerID integer, @ProjectID integer, @CustomerID integer, @BugAttachmentCount integer)
AS
INSERT INTO tblBugs (BugTypeID, BugDescription, BugDescReply, BugStatusID, BugReportDate, BugFixedDate, BughandlerID, ProjectID, CustomerID, BugAttachmentCount)VALUES(@BugTypeID, @BugDescription, @BugDescReply, @BugStatusID, @BugReportDate, @BugFixedDate, @BughandlerID, @ProjectID, @CustomerID, @BugAttachmentCount)
SELECT [BugID] FROM [dbo].[tblBugs] WHERE [BugID] = SCOPE_IDENTITY()

Hvilket ser ud til at virke efter hensigten.. troede man brugte det output noget til output på sp'en.
Avatar billede trer Nybegynder
28. marts 2004 - 18:59 #5
Man benytter output når man vil have output fra sp'en over i en variabel - a la

create procedure xx (@s int output)
as
  set @s=1
go


declare @t int
exec xx (@t output)
print @t

Men i kaldet skal man igen fortælle at man ønsker at modtage svaret og angive variablen svaret skal lægges i.
Avatar billede trer Nybegynder
29. marts 2004 - 11:27 #6
pointtid?
Avatar billede rust10 Nybegynder
01. april 2004 - 15:02 #7
Undskyld forsinkelsen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester