[英]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.