SQL位是错误的

时间:2014-10-05 10:37:09

标签: c# sql-server asp.net-webpages

我遇到了过去一小时我一直试图解决的问题,而我似乎无法解决这个问题。我已经尝试使用谷歌搜索答案,但没有找到一个适用于我的情况,或者至少我还没有能够让它运作。

这是我的代码:

@foreach (var row in db.Query("SELECT * FROM PersonnelFiles WHERE (Badge LIKE '#1003' OR Badge LIKE '#1004' OR Badge LIKE '#1005' AND Archived is not true) ORDER BY Badge ASC"))
{
    <li>@row.Rank - @row.Name, @row.Badge</li>
}

所以根据我的知识,这是有限的,它现在应该返回所有徽章类似的条目&#34;#1003&#34;,&#34;#1004&#34;或者&#34;#1005&#34;,只要这些不是存档的。

但是当尝试这样做时,它会给我一个错误:&#34;语法错误接近false&#34;。

我希望你能帮助我,提前谢谢你。

编辑: Archived是一种数据类型。

2 个答案:

答案 0 :(得分:2)

SELECT * 
FROM PersonnelFiles 
WHERE (
         Badge LIKE '#1003' OR 
         Badge LIKE '#1004' OR 
         Badge LIKE '#1005' AND 
         Archived AND Archived <> 1
       ) ORDER BY Badge ASC

相同
 SELECT * 
    FROM PersonnelFiles 
    WHERE (
             (Badge LIKE '#1003') OR 
             (Badge LIKE '#1004') OR 
             (Badge LIKE '#1005' AND Archived <> 1)
           ) ORDER BY Badge ASC

我想你的意思是

 SELECT * 
        FROM PersonnelFiles 
        WHERE 
                 (
                    Badge LIKE '#1003' OR 
                    Badge LIKE '#1004' OR 
                    Badge LIKE '#1005'
                 ) AND Archived <> 1
                ORDER BY Badge ASC

se SQL Logic Operator Precedence: And and Or

答案 1 :(得分:0)

试试这个:

SQL SERVER中没有像 false 那样的位有1或0值

@foreach (var row in db.Query("SELECT * FROM PersonnelFiles WHERE 
    (Badge LIKE '#1003' OR Badge LIKE '#1004' OR 
    Badge LIKE '#1005' AND Archived <>1) ORDER BY Badge ASC"))
{
    <li>@row.Rank - @row.Name, @row.Badge</li>
}

SQL SERVER DataTypes