使用 CHARINDEX 的 UPDATE 语句产生错误并且不更新任何内容
UPDATE statment with CHARINDEX is producing an error and not updating anything
我正在尝试替换一个总是出现在数据字符串末尾的长字符串。
最后这串数据总是以:<img src="null"
开头
我想什么都不替换...只是一个空白 space 这样其他数据仍然有用。
所以我尝试了 运行更新脚本,但我一直收到这个错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.
这是我的 SQL 更新声明:
DECLARE @searchFor NVARCHAR(40) = N'%<img src="null"%';
UPDATE studentList
SET majorDescription = (SELECT LEFT(majorDescription , CHARINDEX(@searchFor, majorDescription ) - 1) FROM studentList)
WHERE majorDescription like N'%<img src="null"%'
我不确定为什么会出现该错误。我知道有 300 多行,因为当我 运行 这个 SELECT
语句时我可以看到它们:
SELECT majorDescription FROM studentList WHERE majorDescription like N'%<img src="null"%'
还有什么我可以尝试的吗?
谢谢!
如果找不到字符串,您还可以添加“故障保护”。
请注意,我在 charindex()
中添加了串联的 majorDescription+@searchFor
。
也不清楚为什么 SET
是 SELECT
例子
DECLARE @searchFor NVARCHAR(40) = N'<img src="null"';
UPDATE studentList
SET majorDescription = LEFT(majorDescription , CHARINDEX(@searchFor, majorDescription+@searchFor ) - 1)
WHERE majorDescription like N'%'+@searchFor+'%'
为清楚起见,一个简单的解决方法是使用 nullif
传递 null
作为长度参数。
如果参数作为 null 传递,SQL 服务器中的许多函数将 return null
通过设计,这对于避免其他更繁琐的解决方法很有用,因此您可以尝试
SELECT LEFT(majorDescription, NullIf( CHARINDEX(@searchFor, majorDescription ) - 1, -1)) FROM studentList
我正在尝试替换一个总是出现在数据字符串末尾的长字符串。
最后这串数据总是以:<img src="null"
我想什么都不替换...只是一个空白 space 这样其他数据仍然有用。
所以我尝试了 运行更新脚本,但我一直收到这个错误:
Invalid length parameter passed to the LEFT or SUBSTRING function.
这是我的 SQL 更新声明:
DECLARE @searchFor NVARCHAR(40) = N'%<img src="null"%';
UPDATE studentList
SET majorDescription = (SELECT LEFT(majorDescription , CHARINDEX(@searchFor, majorDescription ) - 1) FROM studentList)
WHERE majorDescription like N'%<img src="null"%'
我不确定为什么会出现该错误。我知道有 300 多行,因为当我 运行 这个 SELECT
语句时我可以看到它们:
SELECT majorDescription FROM studentList WHERE majorDescription like N'%<img src="null"%'
还有什么我可以尝试的吗?
谢谢!
如果找不到字符串,您还可以添加“故障保护”。
请注意,我在 charindex()
中添加了串联的 majorDescription+@searchFor
。
也不清楚为什么 SET
是 SELECT
例子
DECLARE @searchFor NVARCHAR(40) = N'<img src="null"';
UPDATE studentList
SET majorDescription = LEFT(majorDescription , CHARINDEX(@searchFor, majorDescription+@searchFor ) - 1)
WHERE majorDescription like N'%'+@searchFor+'%'
为清楚起见,一个简单的解决方法是使用 nullif
传递 null
作为长度参数。
如果参数作为 null 传递,SQL 服务器中的许多函数将 return null
通过设计,这对于避免其他更繁琐的解决方法很有用,因此您可以尝试
SELECT LEFT(majorDescription, NullIf( CHARINDEX(@searchFor, majorDescription ) - 1, -1)) FROM studentList