0

LinqDataSource があります。このデータ ソースは、CHAR 型の ID というフィールドを含む SQL Server のテーブルから読み取ります。一部のレコードでこのフィールドが空白になっているため、これらを除外したいと考えています。「空白」は NULL ではなく、空の文字列でもありません。

T-SQL を使用すると、この句はレコードを適切にフィルター処理できません。

WHERE Employee_ID <> ''

...これが成功する間:

WHERE ASCII(Employee_ID) <> 0

私の質問は、フィールドの ASCII 値でフィルター処理するようにデザイン モードで LinqDataSource を構成する方法、またはこれらのレコードが返されないようにフィルター処理する方法を教えてください。

これは、データ ソースのマークアップです。

 <asp:LinqDataSource ID="LinqDataSourcePersonnel" runat="server" ContextTypeName="exc009p.Owner_SummariesDataContext"
    EntityTypeName="" TableName="Personnels" Select='new(Employee_ID, Employee_Name, Employee_Title, (Employee_ID + " " + Employee_Name + " - " + Employee_Title) as employeeIDNameTitle)'
    OrderBy="Employee_Name, Employee_ID" Where="Employee_ID != @Employee_ID">
    <WhereParameters>
        <asp:Parameter DefaultValue="&quot;&quot;" Name="Employee_ID" Type="String" />
    </WhereParameters>
</asp:LinqDataSource>
4

1 に答える 1

0

問題の根本は、列に印刷できない文字 (タブ、CR、LF など) があることだと思います。クエリを実行すると、結果は空白のように見えますが、実際には印刷できない文字が含まれています。

最善のアクションは、(アプリケーションで) データを検証して、有効な文字のみがこの列に挿入されるようにすることだと思います。これにより、メイク シフト フィルターを使用する必要がなくなります。

データを変更したり、データを検証したりできない場合は、SARGable (インデックス シークに使用できる) であるため、おそらく次のようなことを試してみます。

select *
from MyTable
WHERE employee like '[a-z0-9]%'
于 2013-08-02T16:59:19.447 に答える