Sql server 2008 SQL Select语句不会返回字符字段,只返回数字字段

Sql server 2008 SQL Select语句不会返回字符字段,只返回数字字段,sql-server-2008,select,asp-classic,textfield,Sql Server 2008,Select,Asp Classic,Textfield,我今天一整天都在为这个绞尽脑汁。 我有下面的ASP代码,它使用了从下拉框中输入的Request.Querystring 启动select语句。querystrinch确实会显示在?=URL中,但只在 Microsoft SQL DB中的数值列。我无法查找名称或简单的3个字符字段 CODE: If Request.QueryString("m") > 0 Then filterID = Request.QueryString("m") filterColmn = "imDegree" E

我今天一整天都在为这个绞尽脑汁。 我有下面的ASP代码,它使用了从下拉框中输入的Request.Querystring 启动select语句。querystrinch确实会显示在?=URL中,但只在 Microsoft SQL DB中的数值列。我无法查找名称或简单的3个字符字段

CODE:
If Request.QueryString("m") > 0 Then
filterID = Request.QueryString("m")
filterColmn = "imDegree"
  Else filterID = 0
End If

If filterID > 0 Then
     SQlQuery = "SELECT * FROM v_InternImport WHERE iID IN (SELECT iID FROM v_InternImport WHERE " &   filterColmn & " = " & filterID & ")"
  End If
End If

我知道这个select语句是其中的一个子select语句,但我甚至无法从数据库中获得正确的结果。select语句引用的视图与填充之前加载的asp主页面的视图相同,并且显示fine

向SQL Server传递字符串时,需要用单引号将其括起来

SQlQuery = "SELECT * FROM v_InternImport 
WHERE iID IN (SELECT iID FROM v_InternImport 
WHERE " &   filterColmn & " = '" & filterID & "')"
传递数字时,不使用引号

所以,当你说

从filterColumn=filterID的表中选择*

你应该发送一个号码

要匹配字符串,请执行以下操作: 从filterColumn='filterID'的表中选择*

这假设您已经解决了评论员提到的关于filterID变量中是否有值的任何其他问题。我衷心同意使用参数化查询的建议

编辑:单引号放在双引号内

SQlQuery = "SELECT * FROM v_InternImport 
WHERE iID IN (SELECT iID FROM v_InternImport 
WHERE " &   filterColmn & " = '" & filterID & "')"

使用参数化查询。这将解决你的问题,而不是让你敞开心扉。绝对可以在查询字符串中传递任何内容。您如何确定它是数字还是字符串?>0? 那不行。。。在您的问题中,我没有看到字符串值的select语句。select语句是select*FROM v_InternImport,其中iID在select iID FROM v_InternImport WHERE&filterColmn&=&filterID&End中,如果该列是DB中的一列,并且filterID是传入的查询字符串。也许我应该编辑querystring来添加我以前尝试过但不起作用的单引号。我想知道,即使SELECT*的SQL显示是,我的数据库是否存在导致此问题的数据类型问题。我希望不是。你能逐级检查你的代码,并将SqlQuery值的示例复制/粘贴到你的答案中以供参考吗?检查您传递的字符串是否与数据库中的字符串“真的”相同,特别是如果有任何尾随空格或类似的内容。@MartinSmith:+1供您评论,但作为一个回答,只需稍加解释就更好了。是的,我确实在filterID变量中有值,我可以在ASP URL页中看到它们。ASP?m=XXX,我在select语句中添加了单引号,如下所示[filterColmn&='&filterID&']一个在变量前面,一个在变量后面,但是没有运气。-1:任何可能导致站点暴露于SQL注入攻击的危险编程技术的答案都必须被否决,对不起。如果查询字符串m解析为“;DELETE v_internport;KILL ALL_human;”?好吧,Anthony,我回答了所问的问题。在除了鼓励在我自己的答案中使用参数化查询之外,还有一条向上投票的评论建议使用相同的方法。一般来说,我尝试实际回答这个问题,而不是对编码最佳实践提出一般性建议,特别是在我不太了解的领域,如经典ASP。