2010-07-14 17 views
1

J'ai été cogner la tête contre un mur pour la dernière heure d'essayer de comprendre cela, sql me donne l'erreur suivanteSQL Server: Échec de la conversion d'une chaîne de caractères à uniqueIdentifier

Msg 8169, Level 16, State 2, Procedure GetAppointmentsByProfessionalName, Line 6 
Conversion failed when converting from a character string to uniqueidentifier. 

lorsque cette procédure stockée est exécutée

-- ============================================= 
    -- Create date: <July 2010> 
    -- Description: <Gets a list of appointments for a professionals username> 
    -- ============================================= 
    Drop procedure GetAppointmentsByProfessionalName 
    go 
    Create procedure GetAppointmentsByProfessionalName(@ProfessionalName varchar(256)) 
    as 
    declare @ProfessionalID uniqueidentifier 
    set @ProfessionalID = (select UserId from aspnet_Users where UserName = @ProfessionalName) 

    select a.AppointmentID as 'Appointment ID', 
     c.Name as 'Client Name', 
     p.Name as 'Professional Name', 
     a.ProposedDate as 'Date', 
     CONVERT(CHAR(8), a.ProposedTime, 114)as 'Time', 
     a.ClientDescription as 'Client Notes', 
     a.Confirmed as 'Confirmed Appointment' 
    from Appointment a join Client c on a.ForClientID = c.ClientID 
      join dbo.Professional p on a.ForProfessionalID = p.ProfessionalID 
    where ForProfessionalID = @ProfessionalName 
    go 

J'utilise les tables des membres de asp.net par défaut, ainsi que les définitions suivantes

create table Professional 
(
ProfessionalID uniqueidentifier not null constraint pk_ProID Primary Key references aspnet_Users(UserId), 
Name varchar(256), 
Email varchar(256), 
Phone varchar(256), 
DisplayPictureUrl varchar(256), 
ProfileSubHeader varchar(1000), 
ProfileContent varchar(1000), 
ServicesSubHeader varchar(1000), 
ServicesContent varchar(1000) 
) 

go 

create table Client 
(
ClientID int identity not null constraint pk_ClientID Primary Key clustered, 
Name varchar(256), 
Email varchar(256), 
Phone varchar(256) 
) 

go 

create table AppointmentType 
(
TypeID int identity not null constraint pk_AppointmentTypeID Primary Key clustered, 
Name varchar(256), 
Description varchar(256), 
DisplayPictureUrl varchar(256) 
) 

go 

create table Appointment 
(
AppointmentID int identity not null constraint pk_AppointmentID Primary Key clustered, 
ForClientID int null constraint fk_ForClientID references Client(ClientID), 
ForProfessionalID uniqueidentifier not null constraint fk_ForProfessionalID references aspnet_users(UserID), 
ProposedTime datetime not null, 
ProposedDate datetime not null, 
TypeID int not null constraint fk_TypeID references AppointmentType(TypeID), 
ClientDescription varchar(256) null, 
Confirmed bit 
) 

GO 

C'est probablement un problème de syntaxe, je ne suis pas encore très bien avec SQL. J'espère que quelqu'un ici sera en mesure de repérer mon problème.

Répondre

8

Votre procédure stockée accepte un varchar(256), mais votre instruction WHERE se joint à ForProfessionalID, qui est un identificateur unique.

+0

D'OH! Je voulais vraiment mettre @ForProfessionalID là, merci – Gallen

+0

Je voudrais pouvoir upvote plus d'une fois. Rien de tel que d'avoir un moment de réflexion à Little Bobby Tables! – Moose

+0

Hehe, merci à tous! – LittleBobbyTables

2

le problème est:

where ForProfessionalID = @ProfessionalName 

Je pense que vous voulez

where ForProfessionalID = @ProfessionalID 
Questions connexes