从sql查询和存储过程中删除''

时间:2014-11-18 14:26:35

标签: sql sql-server sql-server-2008

我有一个表,其中名为data的列的类型为varbinary。如果我做一个简单的查询

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事件探查器中看到它将查询作为“数据”运行 它不会返回任何行

由于

1 个答案:

答案 0 :(得分:0)

既然您已经说过编写过SP,我认为inpput参数被指定为NVARCHAR或VARCHAR

下面是一种做法,但我猜测名为data的列在第一个解决方案中只有整数值。

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

以上仅在上面指定的数据列为整数时才会出现。

如果相同的是字符串(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/