-1

嘿,我正在尝试使用此代码,但我不知道为什么会出现此错误:

Msg 8114, Level 16, State 5, Procedure stat_mob_user_spec, Line 23
Error converting data type nvarchar to bigint.

代码是:

ALTER PROCEDURE [dbo].[stat_mob_user_spec] (@bt NVARCHAR(60) = NULL)
AS
    DECLARE @ResultValue FLOAT,
            @test        NVARCHAR(70)

    BEGIN TRAN

    SET @test = 'and blood_type = ' + @bt;

    IF @bt = 'abc'
      BEGIN
          SET @test = '';
      END

    SELECT @ResultValue = COUNT(id_tips)
    FROM   tips,
           blood
    WHERE  blood_id = id_blood + @test;

    IF @ResultValue <> 0
      BEGIN
          ROLLBACK TRAN
      END
    ELSE
      BEGIN
          COMMIT TRAN
      END

    RETURN @ResultValue 

如果我输入参数(abc),这段代码就可以工作......得到了结果......但是如果我尝试其他任何东西,我就会出错......有什么帮助吗?

我正在使用 sql server 2008

4

1 回答 1

3

您的查询是:

SELECT @ResultValue = COUNT(id_tips)
from tips,blood 
where blood_id = id_blood + @test ;

您正在将字符串值 ( @test) 添加到任何id_blood内容中。我想这是一个bigint,这是不允许的。

看起来您可能正在考虑动态 SQL。但这不是您编写动态 SQL 的方式。我建议您与本地人讨论在 SQL Server 中编写存储过程的正确方法(或至少阅读select声明中的文档)。另外,学习正确的连接语法。from只需对子句中的逗号说“不” 。

于 2013-08-22T21:33:22.807 回答