2015-06-09 25 views
2

SQL對我來說還是比較新的,但我已經從我所做的研究中產生了這一點。C#中的SQL查詢錯誤:使用SELECT JOIN WHERE或

這是我的SQL命令:

"SELECT Array_ID 
FROM Array_Location JOIN 
     Obj_Type.Type_ID ON Array_Location.Obj_Type 
WHERE (Obj_Type.Object = 'CIRCLE') 
    OR (Obj_Type.Object = 'POLYGON');" 

這是我的錯誤

An expression of non-boolean type specified in a context where a condition is expected, near 'WHERE'

這是一個語法問題,但我不知道該解決方案

兩個表我有:

CREATE TABLE [dbo].[Obj_Type] (
[Type_ID] INT NOT NULL, 
[Object] TEXT NOT NULL, 
CONSTRAINT [PK_OBJ_TYPE] PRIMARY KEY CLUSTERED ([Type_ID] ASC) 
); 

CREATE TABLE [dbo].[Array_Location] (
[Array_ID] INT NOT NULL, 
[Obj_Type] INT NOT NULL, 
[Element_ID] INT NOT NULL, 
CONSTRAINT [Array_Location_fk0] FOREIGN KEY ([Obj_Type]) REFERENCES [dbo].[Obj_Type] ([Type_ID]) ON UPDATE CASCADE 
); 

謝謝

+0

錯字,對不起,如果你跑起來你得到這個錯誤。我確實包含在我的代碼中。所以仍然是相同的錯誤 – SammyG

+0

更新你的問題,以反映你使用的確切代碼 –

+0

我已經完成了。立即解決 – SammyG

回答

1

這裏是你想要的,你還需要轉換投TEXTvarcharnvarchar

SELECT Array_ID 
FROM Array_Location JOIN 
    Obj_Type ON Obj_Type.Type_ID = Array_Location.Obj_Type 
WHERE (Convert(nvarchar(max),Obj_Type.Object) = N'CIRCLE') OR (Convert(nvarchar(max),Obj_Type.Object) = N'POLYGON'); 
0
"SELECT Array_ID FROM Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON'); 

你錯過了在

0

您可能會錯過在JOIN解決array_ID表名,也是錯誤的語法括號(「)」)在聲明的結尾。嘗試這個。

SELECT Array_Location.Array_ID 
FROM Array_Location 
    INNER JOIN Obj_Type 
    ON Array_Location.Type_ID = Obj_Type.Type_ID 
WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON') 
2

原因:

你有語法錯誤JOIN:

Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type 

解決方案:

SELECT Array_ID 
FROM Array_Location JOIN 
    Obj_Type ON Obj_Type.Type_ID = Array_Location.Obj_Type 
WHERE (CONVERT(nvarchar(50),Obj_Type.Object) = N'CIRCLE') 
    OR (CONVERT(nvarchar(50),Obj_Type.Object) = N'POLYGON'); 
+0

祝你好運,比較Text和varchar –

+0

@PravinDeshmukh:啊!你是對的!在OP編輯他的問題之前,我不知道數據類型。感謝您指出 –

0

你缺少結束接近支架Obj_Type.Object ='POLYGON' .SQL服務器WHERE子句始終期望將條件評估爲布爾值(true/false)。 請查詢更改爲以下:

SELECT Array_ID FROM Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON');

1

您的加入不僅語法錯誤,而且你是否執行了兩個在sql server中一起創建表的腳本?在你糾正你的連接查詢,您必須糾正這種方式創建表腳本

Foreign key Array_Location_fk0 references invalid table dbo.Obj_Type

CREATE TABLE [dbo].[Obj_Type] (
[Type_ID] INT NOT NULL, 
[Object] TEXT NOT NULL, 
CONSTRAINT [PK_OBJ_TYPE] PRIMARY KEY CLUSTERED ([Type_ID] ASC) 
); 

CREATE TABLE [dbo].[Array_Location] (
[Array_ID] INT NOT NULL, 
[Obj_Type] INT NOT NULL, 
[Element_ID] INT NOT NULL, 
CONSTRAINT [Array_Location_fk0] FOREIGN KEY ([Obj_Type]) REFERENCES [dbo].[Obj_Type] ([Type_ID]) ON UPDATE CASCADE 
); 
+0

我剛剛從Visual Studios複製它。但我確實有正確的創作。很好,但謝謝。我在這個問題中修改了它。 – SammyG