2010-07-14 10 views
1

Я стучал головой о стену в течение последнего часа, пытаясь понять это, SQL дает мне следующую ошибкуSQL Server: Конверсия удалось при преобразовании из строки символов UniqueIdentifier

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

когда эта хранимая процедура выполняется

-- ============================================= 
    -- 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 

Я использую членство таблицы в asp.net по умолчанию, а также следующие определения

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 

Его, вероятно, проблема с синтаксисом, я пока не слишком хорошо разбираюсь в SQL. Я надеюсь, что кто-то здесь сможет определить мою проблему.

ответ

8

Ваша хранимая процедура принимает varchar(256), но ваш оператор WHERE соединяется с ForProfessionalID, что является уникальным идентификатором.

+0

D'OH! Я полностью хотел поставить @ForProfessionalID там, спасибо – Gallen

+0

Хотелось бы, чтобы я мог продвигать это не один раз. Ничто не похоже на то, что вы попадаете в мозг, забитый Маленькими Бобби Столами! – Moose

+0

Хе-хе, спасибо всем! – LittleBobbyTables

2

проблема:

where ForProfessionalID = @ProfessionalName 

Я думаю, что вы хотите

where ForProfessionalID = @ProfessionalID 
Смежные вопросы