2010-01-22 71 views
4

C++ Builder的ADOQuery SQLServer的SQL [轉換爲bool]

我使用這個選擇

SELECT Name, 
     COALESCE(
     (
     SELECT TOP 1 0 
     FROM TbUserParam 
     WHERE TbUserParam.ID_User = @ID_User 
       AND TbUserParam.ID_Param = CfgListParIzm.ID_ListParIzm 
     ), 1) Visi 
FROM CfgListParIzm 
WHERE CfgListParIzm.ID_ListGroupParIzm = @ID_ListGroupParIzm 

Stuff about this query

在我與SQL查詢字符串

存儲過程:

FlowClientHardQ :ID_User, :ID_ListGroupParIzm 

then DataSource and DBG刪除CheckBox字段。 Source

所以我需要從我的ADO查詢布爾(或位)字段。 如何/在哪裏可以轉換它?

謝謝。

回答

10

鑄就位?

SELECT Name, 
     CAST(
     COALESCE(
     (
     SELECT TOP 1 0 
     FROM TbUserParam 
     WHERE TbUserParam.ID_User = @ID_User 
       AND TbUserParam.ID_Param = CfgListParIzm.ID_ListParIzm 
     ), 1) as bit) Visi 
FROM CfgListParIzm 
WHERE CfgListParIzm.ID_ListGroupParIzm = @ID_ListGroupParIzm 

但是你能不能由此改寫查詢,以避免子查詢:

SELECT 
    C.Name, 
    CAST(CASE WHEN T2.ID_Param IS NULL THEN 0 ELSE 1 END as bit) AS Visi 
FROM 
    CfgListParIzm C 
    LEFT JOIN 
    (
    SELECT 
     T.ID_Param 
    FROM 
     TbUserParam T 
    WHERE 
     T.ID_User = @ID_User 
    ) T2 On T2.ID_Param = C.ID_ListParIzm 
WHERE 
    C.ID_ListGroupParIzm = @ID_ListGroupParIzm 
+0

是的它的工作原理,謝謝,但我仍然有一些奇怪的麻煩在某處「無法找到字段Visi」(只在運行程序)... 也謝謝你避免子查詢! – Cynede 2010-01-22 06:58:56

3

也許CAST到幾分?

SELECT CAST(COALESCE(NULL,1) AS BIT) 

UPDATE 你可以使用是ISNULL()爲好。 SELECT CAST(ISNULL(NULL,1) AS BIT)