Запустить команду Update-Package
с помощью консоли диспетчера пакетов
. Это исправит MSB3277, что он переустанавливает все пакеты и все связанные сборки, к которым они приходят, с самой высокой возможной версией. Также возможно обновить только определенный пакет. Или понизите рейтинг после обновления, если захотите, эта исправленная проблема для меня несколько раз пришла. В зависимости от того, сколько пакетов nuget у вас есть, этот процесс может занять несколько минут.
Дополнительная информация о официальных документах https://docs.microsoft.com/en-us/nuget/consume-packages / переустановка-и-обновление-пакеты
Я боюсь, что Вы не можете сделать этого в функции
, Когда Вы пытаетесь объявить функцию как:
create function dbo.textReplace(
@inText as text)
returns text
as
begin
return 'a' -- just dummy code
end
Вы получите следующую ошибку:
The text data type is invalid for return values.
, Другими словами, Вы не могли записать простой эквивалент функции ЗАМЕНЫ для типа данных text
Необходимо было бы бросить текстовое поле к varchar (8000) или nvarchar (4000), если Вы заменяете по ntext полю.
MyField = ЗАМЕНА (БРОСОК (MyField как VARCHAR (4000)), "string1", "string2")
Это, конечно, будет только работать, если можно гарантировать, что содержание в поле является < = 4000/8000 символы в длине.
Это - мой фрагмент кода для этого сценария:
DECLARE @oldtext varchar(1000)
DECLARE @newtext varchar(1000)
DECLARE @textlen int
DECLARE @ptr binary(16)
DECLARE @pos int
DECLARE @id uniqueidentifier
SET @oldtext = 'oldtext'
SET @newtext = 'newtext'
SET @textlen = LEN(@oldtext)
DECLARE mycursor CURSOR LOCAL FAST_FORWARD
FOR
SELECT [UniqueID]
,TEXTPTR([Text])
,CHARINDEX(@oldtext, [Text]) - 1
FROM [dbo].[myTable]
WHERE [Text] LIKE '%' + @oldtext +'%'
OPEN mycursor
FETCH NEXT FROM mycursor into @id, @ptr, @pos
WHILE @@fetch_status = 0
BEGIN
UPDATETEXT [dbo].[myTable].Text @ptr @pos @textlen @newtext
FETCH NEXT FROM mycursor into @id, @ptr, @pos
END
CLOSE mycursor
DEALLOCATE mycursor
Вы также можете использовать функцию SUBSTRING (), которая возвращает varchar при передаче текстового значения.
Например:
MyVarchar = SUBSTRING(myTextField, 1, DATALENGTH(myTextField))
Если вы заполняете varchar с определенной длиной, вы можете усечь его, чтобы он соответствовал:
MyVarchar100 = SUBSTRING(myTextField, 1, 100)
Вот пример запроса для обновления таблицы с текстовым столбцом с помощью функции REPLACE. Надеюсь, это будет полезно для вас.
UPDATE <Table> set textcolumn=
REPLACE(SUBSTRING(textcolumn,1,DATALENGTH(textcolumn)),'findtext','replacetext')
WHERE <Condition>