1

我知道以前有人问过这个问题,但没有一个答案能解决这个问题,需要另一双眼睛。我正在尝试创建一个表并为其添加一些值。我没有任何价值限制,所以我不确定为什么会收到我遇到的错误。

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

3 回答 3

2

在没有明确指定长度的情况下,您永远不应该指定CHAR、或列(或变量或参数)!VARCHARNCHARNVARCHAR

如果你省略了特定的长度,在某些情况下,你最终会得到一个长度正好为一个字符的变量或列!这通常不是你想要的!

还:你为什么要存储TimeStringTimeValue作为NCHAR?没有任何意义——使用最合适的数据类型——在这里,就是DATETIME2(n)and 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,

你应该没事。

于 2019-07-01T03:30:30.807 回答
1

您需要在表中声明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
于 2019-07-01T03:29:31.987 回答
0

您在插入查询中出错,最后一列中的类型不匹配。

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);
于 2019-07-01T03:31:05.410 回答