Запрос со строкой с нулевым символом в конце - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь написать сценарий T-SQL для выравнивания двух копий базы данных с tablediff утилита , предоставляемая SQL Server, но я столкнулся с проблемой со всеми строками текстового поля внутри таблицы.

Проблема в том, что все строки, хранящиеся в этом текстовом поле, заканчиваются нулем (фактически, в конце строки есть нулевой символ, если я экспортирую их в текстовый файл), а также INSERT и UPDATE все запросы, генерируемые tablediff, не выполняются из-за того, что нулевой терминатор обрезает запрос.

Есть ли способ предотвратить сбой сгенерированных скриптов?

UPDATE

Запрос на создание, сгенерированный MSSQL для таблицы, которую я пытаюсь выровнять

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[TABTEST](
    [Code] [varchar](50) NOT NULL,
    [Source] [text] NULL,
 CONSTRAINT [PrK_TABTEST] PRIMARY KEY CLUSTERED 
(
    [Code] 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

SET ANSI_PADDING OFF
GO

Вставить запрос, сгенерированный tablediff (имейте в виду, что символ, который вы не видите в конце Source после NOOP, является символом ANSI NULL)

UPDATE [dbo].[TABTEST] SET [Source]=N'NOOP ' WHERE [Code] = N'TestCode'

1 Ответ

0 голосов
/ 08 мая 2018

CHAR(0) может быть неприятным ...

Я предлагаю вырезать последний символ, LEN() вернет длину, включая 0x0.Попробуйте:

DECLARE @s VARCHAR(100)='test' + CHAR(0)

SELECT @s + 'extension' AS Result1,
       LEFT(@s,LEN(@s)-1) + 'extension' AS Result2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...