Сообщение 8152 Строка или двоичные данные будут обрезаны - PullRequest
1 голос
/ 01 июля 2019

Я знаю, что об этом уже спрашивали, но ни один из ответов не решает проблему, нужен другой набор глаз. Я пытаюсь создать таблицу и заполнить ее некоторыми значениями. У меня нет никаких ценностных ограничений, поэтому я не уверен, почему я получаю ошибку, которую я получаю.

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

Ответы [ 3 ]

2 голосов
/ 01 июля 2019

Никогда не следует указывать столбец 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,

и с тобой все будет в порядке.

1 голос
/ 01 июля 2019

Вам необходимо указать размер полей 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
0 голосов
/ 01 июля 2019

У вас ошибка в запросе вставки, несоответствие типов в последнем столбце.

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