Tsql 数据库进程失败,表示无法将varchar(param)转换为int

Tsql 数据库进程失败,表示无法将varchar(param)转换为int,tsql,stored-procedures,Tsql,Stored Procedures,我有下面的过程,应该在多对多表中插入一个单元格。问题是,它失败了,并且出现了一条错误消息,我没有得到它的原因,因为我不打算进行任何转换 ALTER PROCEDURE [dbo].[updateGrade] @grade int, @studentName nvarchar(50), @courseName nvarchar(50) AS BEGIN TRANSACTION; BEGIN TRY IF (@grade <

我有下面的过程,应该在多对多表中插入一个单元格。问题是,它失败了,并且出现了一条错误消息,我没有得到它的原因,因为我不打算进行任何转换

ALTER PROCEDURE [dbo].[updateGrade] 
    @grade int, 
    @studentName nvarchar(50), 
    @courseName nvarchar(50)
AS
    BEGIN TRANSACTION;

    BEGIN TRY
            IF (@grade < 0 OR @grade > 10 OR @grade=NULL )
                 RAISERROR('!! grade -- @grade < 0 OR @grade > 10 OR ISNULL(@grade, 0) = 0', 18, 0)
            IF (@studentName = '' OR ISNULL(@studentName,0) = 0)
                 RAISERROR('!! studentName -- @studentName = '' OR ISNULL(@studentName)', 18, 0)        
            IF (@courseName = '' OR ISNULL(@courseName,0) = 0)
                 RAISERROR('!! courseName -- @courseName = '' OR ISNULL(@studentName)', 18, 0)

        SET @studID = (SELECT id FROM students WHERE students.name = @studentName)
        SET @courseID = (SELECT id FROM courses WHERE courses.name = @courseName)

        INSERT INTO grades (grade, studentID, courseID)
            VALUES (@grade, @studID, @courseID)
        END TRY
        BEGIN CATCH
            SELECT 
                ERROR_NUMBER() AS ErrorNumber
                ,ERROR_SEVERITY() AS ErrorSeverity
                ,ERROR_STATE() AS ErrorState
                ,ERROR_PROCEDURE() AS ErrorProcedure
                ,ERROR_LINE() AS ErrorLine
                ,ERROR_MESSAGE() AS ErrorMessage;

            IF @@TRANCOUNT > 0
                ROLLBACK TRANSACTION;
        END CATCH;

        IF @@TRANCOUNT > 0
            COMMIT TRANSACTION;
ret代码:

DECLARE @return_value int

EXEC    @return_value = [dbo].[updateGrade]
        @grade = 6,
        @studentName = N'Maier Bogdan',
        @courseName = N'baze2'

SELECT  'Return Value' = @return_value

GO
错误:

将nvarchar值“Maier Bogdan”转换为数据类型int时,转换失败

错误如下:

ISNULL(@studentName,0) = 0
将@studentName(nvarchar(50))与0(int)进行比较


请注意,当@studentName为Null时,问题不会出现因为您将0与0进行比较,但是,当@studentName不为Null时,您将@studentName与0进行比较

请向我们显示该调用,以及生成此错误的参数。@BogdanM::因此,解决方法是使用类似以下内容:
ISNULL(@StudentName,N“”)=N“”
而不是使用
nvarchar(N)
值-而不是
0
!谢谢你,我使用了一个基本的方法@studentName='',它是有效的,不过还是要谢谢你solution@marc_s对我忘了解决办法!谢谢你发布它!
ISNULL(@studentName,0) = 0