2014-11-18 2 views
0

У меня есть таблица, в которой столбец с именем data имеет тип varbinary. Если я сделаю простой запросУдаление '' из запроса sql и хранимой процедуры

select * from tab where data = 1 тогда он работает, но если я сделаю select * from tab where data = '1', то он не вернет ни одной строки. Проблема возникает, когда я создаю хранимый процесс для извлечения данных из этой таблицы, и он преобразует запрос и добавляет '' в параметр при запросе, и поэтому я не могу получить какие-либо данные. Может кто-нибудь, пожалуйста, расскажите мне, как обойти эту проблему.

Parameters 
@ID INT = NULL 
,@Data varchar(100) = NULL 

CREATE TABLE #Results (  
     ID  INT  
     ,Data varchar(100) 

    ) 

BEGIN  
    INSERT #Results (
     ID 
     ,Data 

     ) 
    SELECT 
       SK.ID    
       ,SK.Data 

    FROM dbo.tab SK 
    where SK.ID = @ID And SK.data = @data 

END 

    SELECT @TotalRows = COUNT(*)  
    FROM #Results 

SELECT @TotalRows TotalRows 

Теперь из кода, когда я выполнить эту инструкцию

oReader = ExecuteReader(oConn, CommandType.StoredProcedure, "Proc", New SqlParameter("@ID", Request.ID), _ 
                           New SqlParameter("@Data", Request.Data)) 

я вижу в SQL Profiler, что он запускает запрос как «данные» , который не возвращает ни одной строки

Благодаря

+0

Закрепить хранимую процедуру. –

+0

укажите ваш запрос! –

+0

Каков тип данных поля данных на вкладке таблицы? – Matt

ответ

0

Поскольку вы сказали, что вы написали SP, я думаю, что параметр inpput указан как NVARCHAR или VARCHAR

Ниже приведен один из способов, но я предполагаю, что столбец с именем data будет иметь только целочисленные значения в первом решении.

DECLARE @X VARCHAR(5) 
SET @X = '1 ' 
SELECT CAST(@X AS INT) 

Вышеуказанное относится только к столбцу данных, указанному выше, Integer.

Если же строка (VARCHAR), вы можете написать определенную пользователем функцию, чтобы сделать то же самое.

CREATE FUNCTION dbo.TRIM(@string VARCHAR(8000)) 
    RETURNS VARCHAR(8000) 
    BEGIN 
    RETURN LTRIM(RTRIM(@string)) 
    END 


SELECT dbo.TRIM('1 ') 

Я надеюсь, что выше было полезно, я получил эту идею, а скопировал функцию из здесь http://blog.sqlauthority.com/2007/04/24/sql-server-trim-function-udf-trim/

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