2014-07-21 44 views
1

我有這樣的SQL:如何將SQL Server列的值設置爲True/False?

var sql = @"UPDATE TestQuestion 
         SET UserDataJSON = @UserDataJSON, 
           Answered = TRUE 
         WHERE TestQuestionId = @TestQuestionId"; 
      List<SqlParameter> parameterList = new List<SqlParameter>(); 
      parameterList.Add(new SqlParameter("@TestQuestionId", testQuestionId)); 

CREATE TABLE [dbo].[TestQuestion] (
    [TestQuestionId] INT    IDENTITY (1, 1) NOT NULL, 
    [TestId]   VARCHAR (20)  NOT NULL, 
    [Answered]  BIT    DEFAULT ((0)) NULL, 
    CONSTRAINT [PK_TestQuestion] PRIMARY KEY CLUSTERED ([TestQuestionId] ASC) 
); 

我如何設置回答爲真?我試過,但它提到了無效的 列名。

+2

你試過'Answered = 1'嗎? – Taryn

回答

4

從技術上講,SQL Server既沒有布爾數據類型,也沒有布爾文字。它有bit數據類型,表示您正在使用,它是一個接受值01的數值類型。某些數據訪問層(如ADO)會假裝這是外語(如C#)中的布爾類型,但是當您將一段文字SQL代碼編寫爲字符串時,不涉及這些數據訪問層


如果您希望繼續假裝SQL Server有一個布爾數據類型,因爲ADO假裝它,那麼你需要讓ADO進行必要的調整,爲您提供:

var sql = @"UPDATE TestQuestion 
        SET UserDataJSON = @UserDataJSON, 
          Answered = @Answered 
        WHERE TestQuestionId = @TestQuestionId"; 
     List<SqlParameter> parameterList = new List<SqlParameter>(); 
     parameterList.Add(new SqlParameter("@TestQuestionId", testQuestionId)); 
     parameterList.Add(new SqlParameter("@Answered", true)); 

ADO會將參數中的布爾值轉換爲適合於SQL Server的值bit類型 - 01

+0

是的,並用'WHERE Answered <> 0'而不是'WHERE Answered = 1'查詢。這更加健壯,因爲有些數據庫可能將'True'表示爲'-1'或者任何非零的數據(如果您使用Access作爲前端,則可能是這種情況)。 –

+0

實際上可以有3個值。 0,1和NULL。 –

+0

@SeanLange - 這取決於您是否將'NULL'視爲值或非值 - 我完全承認在所有時間和論壇上我都不是100%一致的,但我通常嘗試將NULL分隔爲一個非價值。 –

0

用1替換TRUE:即,您要設置Answered = 1,因爲這是一種位類型。 1在TSQL中表示TRUE。

2

試試這個:(給內''TRUE'值)

var sql = @"UPDATE TestQuestion 
         SET UserDataJSON = @UserDataJSON, 
           Answered = 'TRUE' 
         WHERE TestQuestionId = @TestQuestionId"; 

否則,將被視爲列名。所以設置值爲'

+0

你試過了嗎?我試過它運作得很好......每個人的工作方式都不一樣嗎? – Jesuraja

+0

@alroc - 實際上字符串文字'True'和'False'將在2005年時工作得很好。早期版本不起作用。我同意我不會在我的代碼中這樣做。 –

+0

當分配給「位」列時,字符串「true」和「false」將分別轉換爲「1」和「0」,但它們不能用於布爾表達式。事實上,在T-SQL中,布爾表達式不存在。你不能查詢'WHERE true',但你可以查詢'WHERE 1 = 1'。表達式必須始終是二進制的,不能是一元的。 –

相關問題