如何将SQL Server列的值设置为True / False?

时间:2014-07-21 14:11:05

标签: sql-server

我有这个SQL:

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)
);

如何将已回答设置为TRUE?我尝试了这个,但它提到了无效 列名。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

试试这个:(在'中提供值,即'TRUE'

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

否则,它将被视为列名。因此,请使用'

设置值

答案 2 :(得分:0)

将TRUE替换为1:即,您要设置Answered = 1,因为这是一种比特类型。 1代表TSQL中的TRUE。