我有这个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?我尝试了这个,但它提到了无效 列名。
答案 0 :(得分:4)
从技术上讲,SQL Server既没有布尔数据类型也没有任何布尔文字。它具有bit
数据类型,您已指明自己正在使用,这是一种接受值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));
ADO会将参数中的布尔值转换为适合SQL Server bit
类型的值 - 0
或1
。
答案 1 :(得分:2)
试试这个:(在'
中提供值,即'TRUE'
)
var sql = @"UPDATE TestQuestion
SET UserDataJSON = @UserDataJSON,
Answered = 'TRUE'
WHERE TestQuestionId = @TestQuestionId";
否则,它将被视为列名。因此,请使用'
答案 2 :(得分:0)
将TRUE替换为1:即,您要设置Answered = 1,因为这是一种比特类型。 1代表TSQL中的TRUE。