Sql server Msg 8152字符串或二进制数据将被截断
我知道以前有人问过这个问题,但没有一个答案能解决这个问题,需要另一双眼睛。我正在尝试创建一个表,并在其中添加一些值。我没有任何值约束,所以我不确定为什么会出现错误Sql server Msg 8152字符串或二进制数据将被截断,sql-server,sql-insert,create-table,Sql Server,Sql Insert,Create Table,我知道以前有人问过这个问题,但没有一个答案能解决这个问题,需要另一双眼睛。我正在尝试创建一个表,并在其中添加一些值。我没有任何值约束,所以我不确定为什么会出现错误 CREATE TABLE [dbo].[AvailableTime] ( [Id] [INT] IDENTITY(1,1) NOT NULL, [TimeString] [NCHAR] NOT NULL, [TimeValue] [NCHAR] NOT NULL, [CompanyId] [INT] N
CREATE TABLE [dbo].[AvailableTime]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[TimeString] [NCHAR] NOT NULL,
[TimeValue] [NCHAR] NOT NULL,
[CompanyId] [INT] NOT NULL,
[CompanyName] [NVARCHAR](MAX) NULL,
[LocationId] [INT] NOT NULL,
[LocationName] [NVARCHAR] NOT NULL,
[IsClaimed] [BIT] NOT NULL,
CONSTRAINT [PK_AvailableTime]
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
INSERT INTO dbo.AvailableTime (TimeString, TimeValue, CompanyId, CompanyName,
LocationId, LocationName, IsClaimed)
VALUES ('2019-01-07T00:00:00', '12:00 AM', 1, 'Company',
2, 'Inver Grove', 'FALSE');
您需要在表中声明
CHAR
和VARCHAR
字段的大小:
CREATE TABLE [dbo].[AvailableTime]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[TimeString] [NCHAR](50) NOT NULL,
[TimeValue] [NCHAR](50) NOT NULL,
[CompanyId] [INT] NOT NULL,
[CompanyName] [NVARCHAR](MAX) NULL,
[LocationId] [INT] NOT NULL,
[LocationName] [NVARCHAR](50) NOT NULL,
[IsClaimed] [BIT] NOT NULL,
CONSTRAINT [PK_AvailableTime]
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
如果不指定明确的长度,则绝对不能指定
CHAR
、VARCHAR
、NCHAR
或NVARCHAR
列(或变量或参数)
如果省略特定的长度,在某些情况下,变量或列的长度将恰好为一个字符!这通常不是你想要的
另外:为什么要将TimeString
和TimeValue
存储为NCHAR
??没有任何意义-使用最合适的数据类型-这里是DATETIME2(n)
和TIME
因此,请如下定义您的表:
CREATE TABLE [dbo].[AvailableTime]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[TimeString] DATETIM2(0) NOT NULL,
[TimeValue] TIME(0) NOT NULL,
[CompanyId] [INT] NOT NULL,
[CompanyName] [NVARCHAR](MAX) NULL,
[LocationId] [INT] NOT NULL,
[LocationName] [NVARCHAR](100) NOT NULL,
[IsClaimed] [BIT] NOT NULL,
您应该很好。插入查询中有错误,最后一列中的类型不匹配
INSERT INTO dbo.AvailableTime (TimeString, TimeValue, CompanyId, CompanyName,
LocationId, LocationName, IsClaimed)
VALUES ('2019-01-07T00:00:00', '12:00 AM', 1, 'Company', 2, 'Inver Grove', 0);