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