如何用 SQL 存储过程替换列值的字符串值
how to replace string values of column values by SQL Stored Procedure
我正在使用 SQL Server 2012,我需要从列值中删除特定的字符串数据,该字符串已为用户多次保存到列中。
我需要为其编写存储过程。我的 table 结构如下。
Id UserId ColumnNeedUpdate Address
1 2565 l:\xyz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\myook.png Mumbai
1 2565 l:\xyz\sfd\mbook.png Mumbai
1 2465 l:\xzd\sfd\mybook.png Mumbai
1 2265 C:\myz\sfd\mybook.png Mumbai
1 2965 C:\xsz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\maybook.png Mumbai
1 2765 C:\zxu\sfd\mybook.png Mumbai
1 2465 m:\xdz\sfd\mybook.png Mumbai
现在,如果我为用户 2565 编写 select 查询,结果将如下所示。
1 2565 l:\xyz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\myook.png Mumbai
1 2565 l:\xyz\sfd\mbook.png Mumbai
1 2565 l:\xyz\sfd\maybook.png Mumbai
编写存储过程的目的是更新列 "ColumnNeedUpdate",如下所示。
mybook.png, myook.png,mbook.png,maybook.png
我是 sql 服务器存储过程的新手,所以我尝试了以下方法。
Create PROCEDURE UsingExistsstoredprocedure(@Id int)
AS
DECLARE @ResultValue int,@ResultFirstName nvarchar(500),@imax int,@i int;
BEGIN TRAN
IF EXISTS(SELECT Name FROM Image WHERE UserId = @Id)
BEGIN
SET @imax=@@ROWCOUNT
SET @i=1
WHILE(@i<=@imax)
BEGIN
SET @ResultFirstName =(SELECT Name FROM [picsilo].[dbo].[Image] WHERE UserId=@i);
IF CHARINDEX('\',@ResultFirstName)>0
SET @ResultFirstName=SUBSTRING(@ResultFirstName,0,CHARINDEX('\',@ResultFirstName))
INSERT Into Image (Name)VALUES(@ResultFirstName)
END
END
UPDATE MyTable SET ColumnNeedUpdate =
REPLACE(ColumnNeedUpdate, 'l:\xyz\sfd\', '')
WHERE UserId = 2565
免责声明: 此代码会更改您 table 中的数据。请自行决定使用。
即使使用非静态 "l:\xyz\sfd\" 字符串也应该可以工作:
UPDATE MyTable SET ColumnNeedUpdate =
REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate), 0,
CHARINDEX('\', REVERSE(ColumnNeedUpdate)) - 1))
WHERE UserId = 2565
CREATE PROCEDURE UsingExistsstoredprocedure(@Id int)
AS
BEGIN
UPDATE MyTable SET ColumnNeedUpdate =
REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate ), 0,
CHARINDEX('\',REVERSE(ColumnNeedUpdate ))))
FROM MyTable WHERE UserId = @Id
END
我正在使用 SQL Server 2012,我需要从列值中删除特定的字符串数据,该字符串已为用户多次保存到列中。
我需要为其编写存储过程。我的 table 结构如下。
Id UserId ColumnNeedUpdate Address
1 2565 l:\xyz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\myook.png Mumbai
1 2565 l:\xyz\sfd\mbook.png Mumbai
1 2465 l:\xzd\sfd\mybook.png Mumbai
1 2265 C:\myz\sfd\mybook.png Mumbai
1 2965 C:\xsz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\maybook.png Mumbai
1 2765 C:\zxu\sfd\mybook.png Mumbai
1 2465 m:\xdz\sfd\mybook.png Mumbai
现在,如果我为用户 2565 编写 select 查询,结果将如下所示。
1 2565 l:\xyz\sfd\mybook.png Mumbai
1 2565 l:\xyz\sfd\myook.png Mumbai
1 2565 l:\xyz\sfd\mbook.png Mumbai
1 2565 l:\xyz\sfd\maybook.png Mumbai
编写存储过程的目的是更新列 "ColumnNeedUpdate",如下所示。
mybook.png, myook.png,mbook.png,maybook.png
我是 sql 服务器存储过程的新手,所以我尝试了以下方法。
Create PROCEDURE UsingExistsstoredprocedure(@Id int)
AS
DECLARE @ResultValue int,@ResultFirstName nvarchar(500),@imax int,@i int;
BEGIN TRAN
IF EXISTS(SELECT Name FROM Image WHERE UserId = @Id)
BEGIN
SET @imax=@@ROWCOUNT
SET @i=1
WHILE(@i<=@imax)
BEGIN
SET @ResultFirstName =(SELECT Name FROM [picsilo].[dbo].[Image] WHERE UserId=@i);
IF CHARINDEX('\',@ResultFirstName)>0
SET @ResultFirstName=SUBSTRING(@ResultFirstName,0,CHARINDEX('\',@ResultFirstName))
INSERT Into Image (Name)VALUES(@ResultFirstName)
END
END
UPDATE MyTable SET ColumnNeedUpdate =
REPLACE(ColumnNeedUpdate, 'l:\xyz\sfd\', '')
WHERE UserId = 2565
免责声明: 此代码会更改您 table 中的数据。请自行决定使用。
即使使用非静态 "l:\xyz\sfd\" 字符串也应该可以工作:
UPDATE MyTable SET ColumnNeedUpdate =
REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate), 0,
CHARINDEX('\', REVERSE(ColumnNeedUpdate)) - 1))
WHERE UserId = 2565
CREATE PROCEDURE UsingExistsstoredprocedure(@Id int)
AS
BEGIN
UPDATE MyTable SET ColumnNeedUpdate =
REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate ), 0,
CHARINDEX('\',REVERSE(ColumnNeedUpdate ))))
FROM MyTable WHERE UserId = @Id
END