我有一个表,其中名为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事件探查器中看到它将查询作为“数据”运行 它不会返回任何行
由于
答案 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/