繁体   English   中英

SQL 服务器 2017 - 更新 NVARCHAR(MAX) 列导致问号

[英]SQL Server 2017 - Update NVARCHAR(MAX) column causes question marks

编辑:
我试图通过不添加整个脚本来简化我的问题但没有成功,在得到与我的问题无关的答案后,我添加了整个脚本。

CountryTabs 表的 DDL:

CREATE TABLE [dbo].[CountryTabs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CountryID] [int] NULL,
    [LanguageType] [smallint] NOT NULL,
    [Name] [nvarchar](200) NOT NULL,
    [Content] [nvarchar](max) NULL,
    [CategoryOrder] [smallint] NOT NULL,
    [Status] [int] NOT NULL,
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

--find out how many occurnces
DECLARE @OccurnceTbl table(ID int, Content nvarchar(max),Occurnce int)
INSERT into @OccurnceTbl
SELECT ID,Content, LEN(Content) - LEN(REPLACE(Content, 'http://www.example.com/country_page.asp?countryID=','http://www.example.com/country_page.asp?countryID')) AS count    
FROM CountryTabs where ID = 71


DECLARE @Occurnce int;
SELECT @Occurnce = Occurnce From @OccurnceTbl
DECLARE @Counter int = 0;
 WHILE (@Counter < @Occurnce)
    Begin
        DECLARE @ID int;
        DECLARE @Content nvarchar(max);
        DECLARE @NewContent nvarchar(max);
        SELECT @ID = ID from @OccurnceTbl
        SELECT @Content = Content from CountryTabs where ID = @ID

DECLARE @startIndex int = PATINDEX(N'%http://www.example.com/country_page.asp?countryID%',@Content);

DECLARE @contentWithoutStart NVARCHAR(max) = SUBSTRING(@Content, @startIndex, LEN(@Content))

DECLARE @endIndex int = PATINDEX(N'%">%', @contentWithoutStart) + @startIndex-1;

DECLARE @lengthToReplace int =  @endIndex - @startIndex;

DECLARE @strToReplace nvarchar(500) = SUBSTRING(@Content , @startIndex , @lengthToReplace);
SELECT @NewContent = REPLACE(@Content, @strToReplace ,'https://example-new.com')

UPDATE CountryTabs set Content = @NewContent where ID = @ID

SET @Counter = @Counter + 1;

--Select @startIndex,@endIndex,@lengthToReplace,@Counter,@strToReplace

结尾

结果很多问号?????? 除了那些地方

https://example-new.com

内容栏:

Content nvarchar    no  -1  yes (n/a)   (n/a)   SQL_Latin1_General_CP1_CI_AS

CountryTabs中的Content列是NVARCHAR(MAX)类型,并且它已经包含正确存储的不带问号的字符,仅在它们出现更新之后。

我在这里想念什么?

我很想知道这是否按预期工作:

DECLARE @Content nvarchar(max);
SELECT @Content = Content from CountryTabs where ID = @ID
DECLARE @NewContent nvarchar(max);
DECLARE @strToReplace nvarchar(500) = N'http://www.example.com';
SELECT @NewContent = REPLACE(@Content, @strToReplace ,N'https://new-example.com')

UPDATE CountryTabs set Content = @NewContent where ID = @ID


SELECT Content from CountryTabs where id = @ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM