2013-08-22 3 views
-1

эй им пытаются использовать этот код, но я не знаю, почему им получать эту ошибку:им получать эту ошибку в SQL Server 2008: Ошибка преобразования типа данных NVARCHAR в BigInt

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) ... плохо получил результат .. но я получаю ошибку, если я попробую что-нибудь еще ... любую помощь?

Im с помощью SQL Server 2008

+0

Вы пытаетесь связать строку '@ test' с предложением' where'. Вам нужно взглянуть на использование динамического sql – Taryn

ответ

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.

+0

, который сложит слово .. «dynamic sql» .. thx man! : D я собираюсь сделать некоторые исследования об этом сейчас! btw im new in sql: P – jolyTimePopCorn

+0

Если вам нужен хороший пример поэтапного написания динамического SQL, я просто ответил на вопрос вчера ... хотя его другой сценарий рассматривает мой принятый ответ для пошагового способа как чтобы написать: http://stackoverflow.com/questions/18360118/sql-variables-as-column-names-in-where-clause/18363855#18363855 – logixologist

+0

спасибо! я просто написал первый динамический sql :) – jolyTimePopCorn

Смежные вопросы