Как использовать как в хранимой процедуре с параметром int? - PullRequest
0 голосов
/ 05 февраля 2011

Я использовал инструмент Query Builder в Visual Studio 2008 для создания хранимой процедуры.Это сценарий предварительного просмотра:

IF EXISTS (SELECT * 
             FROM sysobjects 
            WHERE name = 'SelectQuery' AND user_name(uid) = 'dbo')
    DROP PROCEDURE dbo.SelectQuery
GO

CREATE PROCEDURE dbo.SelectQuery
(
    @StudentID int
)
AS
    SET NOCOUNT ON;
SELECT        StudentID, StudentName, StudentPhone, StudentAddress, 
              StudentBirthDay, StudentDescription, StudentStatus
FROM            tbl_Student
WHERE        (StudentID LIKE '%' + @StudentID + '%')
GO

Но когда я попытался выполнить его, я получил ошибку:

Error Message: Conversion fail when converting the value '%' to datatype int.

Пожалуйста, помогите мне!

Ответы [ 4 ]

6 голосов
/ 05 февраля 2011

Вы хотите найти строки, где @StudentID является подстрокой StudentID?Если так

WHERE StudentID LIKE '%' + cast(@StudentID as varchar(10)) + '%'

Должно работать.

1 голос
/ 05 февраля 2011

Я думаю, вам действительно нужно это

WHERE RIGHT(StudentID,12) LIKE '%' + RIGHT(@StudentID,12) + '%'

Если вам интересно, RIGHT неявно преобразует не varchar данные в varchar. Более правильным способом было бы явное использование CONVERT, но, как вы можете видеть, он длиннее.

WHERE (VARCHAR(20),StudentID) LIKE '%' + CONVERT(VARCHAR(20),@StudentID) + '%'

Как указывает Мартин , LIKE неявно преобразует LHS. Не думаю, что я когда-либо пробовал это так, но это работает

declare @studentid int set @studentid = 205

;with tmp as (select 201102050001 studentid)
select * from tmp
WHERE StudentID LIKE '%' + RIGHT(@StudentID,12) + '%'

-> output: 201102050001
1 голос
/ 05 февраля 2011

'%' нельзя использовать с целочисленным типом данных. Зачем вам нужен «%», если у вас абсолютный идентификатор студента? Просто сравните это с '='.

Если вы действительно настаиваете на использовании «%», вам нужно изменить тип данных studentID на varchar или что-то в этом роде.

0 голосов
/ 05 февраля 2011

Одним из простых способов обойти это было бы преобразование StudentID в varchar.Просто используйте CONVERT(varchar, StudentID).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...