SQL Server 問題解決

The data types text and varchar are incompatible in the equal to operator


最近在使用SQL Server的時候,建立了一個數據表Pages,其定義及一行數據如下:

pageId: intpagePath: textpageTitle: text
0/index.aspxHomePage

對該表進行查詢:

SELECT pageTitle
FROM Pages
WHERE pagePath = '/index.aspx';

執行查詢就得到了一條錯誤:

消息 402,級別 16,狀態 1,第 1 行
The data types text and varchar are incompatible in the equal to operator.

這裏的text對應着查詢語句中的pagePath(因爲表中的將pagePath定義爲text類型),varchar對應着”/index.aspx”。

仔細地閱讀一下錯誤提示,還是很好理解的,就是兩個不同的數據類型(data和varchar)不能用等號“=”進行比較。

那麼解決辦法就可以想到了:

  • 類型轉換
  • 修改數據定義,將pagePath轉換成varchar:

    ALTER TABLE Pages;
    ALTER COLUMN pagePath VARCHAR(MAX);

    把pagePath轉換成varchar類型:

    SELECT pageTitle
    FROM Pages
    WHERE CONVERT(VARCHAR(MAX), pagePath) = '/index.aspx';

  • 不使用等號
  • 用LIKE命令替換掉等號”=”:

    SELECT pageTitle
    FROM Pages
    WHERE pagePath LIKE '/index.aspx';

    最後要說明一點,事實上text類型(或ntext)是不推薦使用的類型。在可能的情況下,最好使用varchar()或nvarchar()代替。

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章