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

Sql server 如何将SQL Server列的值设置为True/False?,sql-server,Sql Server,我有一个SQL: var sql = @"UPDATE TestQuestion SET UserDataJSON = @UserDataJSON, Answered = TRUE WHERE TestQuestionId = @TestQuestionId"; List<SqlParameter>

我有一个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)
);
var sql=@“更新测试问题”
设置UserDataJSON=@UserDataJSON,
回答为真
其中TestQuestionId=@TestQuestionId”;
列表参数List=新列表();
Add(新的SqlParameter(“@TestQuestionId”,TestQuestionId));
创建表[dbo]。[TestQuestion](
[TestQuestionId]整数标识(1,1)不为空,
[TestId]VARCHAR(20)不为空,
[应答]位默认值((0))为空,
约束[PK_TestQuestion]主键群集([TestQuestionId]ASC)
);
如何将答案设置为TRUE?我试过这个,但它提到了无效的
列名。

将TRUE替换为1:ie,因为这是一种位类型,所以您希望将Answered设置为=1。1在TSQL中表示TRUE。

将TRUE替换为1:ie,您希望设置Answered=1,因为这是位类型。1在TSQL中表示TRUE。

从技术上讲,SQL Server既没有布尔数据类型,也没有任何布尔文本。它具有表示正在使用的
数据类型,这是一种接受值
0
1
的数字类型。一些数据访问层(如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));
var sql=@“更新测试问题”
设置UserDataJSON=@UserDataJSON,
已回答=@已回答
其中TestQuestionId=@TestQuestionId”;
列表参数List=新列表();
Add(新的SqlParameter(“@TestQuestionId”,TestQuestionId));
parameterList.Add(新的SqlParameter(“@responsed”,true));

ADO将参数中的布尔值转换为适合SQL Server
类型-
0
1

的值,从技术上讲,SQL Server既没有布尔数据类型,也没有任何布尔文字。它具有表示正在使用的
数据类型,这是一种接受值
0
1
的数字类型。一些数据访问层(如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));
var sql=@“更新测试问题”
设置UserDataJSON=@UserDataJSON,
已回答=@已回答
其中TestQuestionId=@TestQuestionId”;
列表参数List=新列表();
Add(新的SqlParameter(“@TestQuestionId”,TestQuestionId));
parameterList.Add(新的SqlParameter(“@responsed”,true));
ADO会将参数中的布尔值转换为适合SQL Server
位的值,即
类型-
0
1

尝试以下操作:(在
'
中给出值,即
'TRUE'

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

设置值,尝试以下操作:(在
'
中给出值,即
'TRUE'


否则,它将作为列名。因此,使用
”设置值。

是否尝试
应答=1
?是否尝试
应答=1
?是否尝试?我试过了,效果很好。。。它对每个人都有不同的作用吗?@alroc-实际上,字符串文字'True'和'False'从2005年起就可以正常工作了。早期的版本不起作用。我同意我不会在我的代码中这样做。字符串
'true'
'false'
将在分配给
列时分别转换为
1
0
,但它们不能在布尔表达式中使用。事实上,在T-SQL中,布尔表达式并不存在。您不能查询
WHERE true
,但可以查询
WHERE 1=1
。表达式必须始终是二进制的,不能是一元的。您试过了吗?我试过了,效果很好。。。它对每个人都有不同的作用吗?@alroc-实际上,字符串文字'True'和'False'从2005年起就可以正常工作了。早期的版本不起作用。我同意我不会在我的代码中这样做。字符串
'true'
'false'
将在分配给
列时分别转换为
1
0
,但它们不能在布尔表达式中使用。事实上,在T-SQL中,布尔表达式并不存在。您不能查询
WHERE true
,但可以查询
WHERE 1=1
。表达式必须始终为二进制且不能为一元。是,并使用
WHERE Answered 0
而不是
WHERE Answered=1
进行查询。这更可靠,因为有些数据库可能将
True
表示为
-1
或任何非零的值(如果您将Access用作前端,则可能是这种情况)。实际上,一个位可以有3个值。0、1和NULL。@SeanLange-这取决于您是将
NULL
视为一个值还是非值-我完全承认,我在这方面并非在所有时间和场合都100%一致,但我通常试图将
NULL
分离为非值。@Damien\u不信者-NULL本身不是一个值,但许多人似乎认为位只能是0或1。是的,用
WHERE Answered 0
而不是
WHERE Answered=1
进行查询。那更像是一个r