2014-04-07 378 views
0

如何在SQL Server R2中將nvarchar(MAX)轉換爲BOOLEAN。我已經試過這在sql server R2中將nvarchar(max)轉換爲布爾值

  Declare @WhereClause nvarchar(max) = 'CityID=1 and CategoryID in(select CategoryID form Category where ParentCategoryID=3'; 
     select CONVERT(bit, @WhereClause) as Test 

SQL拋出這樣的錯誤

Msg 245, Level 16, State 1, Line 3 
    Conversion failed when converting the varchar value 'CityID=1 and CategoryID in(select CategoryID form Category where ParentCategoryID=3' to data type bit. 

我想在我這裏的SQL查詢子句中使用的@WhereClause。 我有go through this,但我不能找到解決辦法

+0

你不能只是有一個WHERE子句動態的,它要麼整個查詢或沒有它。 – dean

+0

當我使用SET @WhereClause ='CityID ='+ CAST(@CityID AS NVARCHAR(10))時,我希望有where子句動態 –

回答

1

你必須做這樣的事情我的朋友:

DECLARE @CityID AS SMALLINT 
DECLARE @ParentCategoryID AS SMALLINT 
Declare @WhereClause nvarchar(max) 
DECLARE @SQLQuery AS NVARCHAR(max) 

SET @CityID = 1 
SET @ParentCategoryID = 3 

SET @WhereClause = 'CityID = ' + CAST(@CityID AS NVARCHAR(10)) + 
' and CategoryID in(select CategoryID form Category where ParentCategoryID = ' 
+CAST(@ParentCategoryID AS NVARCHAR(10)) +')' 

SET @SQLQuery = 'SELECT * FROM YourTable WHERE ' + @WhereClause 

EXECUTE(@SQLQuery) 

這裏是SQL Fiddle樣品。

+0

'每件事情都很好,但是當我使用剩餘部分時,sql顯示'Invalid當我通過'@ParentCategoryID = 1'時,列名爲1' –

+0

如果查詢在您使用''CityID ='+ CAST(@CityID AS NVARCHAR(10))'時正常工作',那麼因爲您是真實的,所以您可能需要查看您的查詢的第二部分更加小心。 – Hamidreza

1

我真的不明白爲什麼要將它轉換爲位數據類型。 然而,你將不能夠做到這一點在SQL Server: http://technet.microsoft.com/en-us/library/ms177603.aspx

您可以使用TRUE或FALSE分別轉換爲1和0,但不工作與別的。

Declare @WhereClause nvarchar(max) = 'TRUE' 
select convert(bit, @WhereClause) as Test 

返回1

相關問題