Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用SQL存储过程替换列值的字符串值_Sql_Sql Server_Stored Procedures - Fatal编程技术网

如何用SQL存储过程替换列值的字符串值

如何用SQL存储过程替换列值的字符串值,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在使用SQL Server 2012,我需要从列值中删除一个特定的字符串数据。该字符串为用户多次保存到列中 我需要为它编写存储过程。我的表结构如下所示 Id UserId ColumnNeedUpdate Address 1 2565 l:\xyz\sfd\mybook.png Mumbai 1 2565 l:\xyz\sfd\myook.png Mumbai 1 2565

我正在使用SQL Server 2012,我需要从列值中删除一个特定的字符串数据。该字符串为用户多次保存到列中

我需要为它编写存储过程。我的表结构如下所示

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
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
mybook.png, myook.png,mbook.png,maybook.png
现在,如果我为用户2565编写select查询,结果如下

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
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
mybook.png, myook.png,mbook.png,maybook.png
编写存储过程的目的是更新列ColumnNeedUpdate,如下所示

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
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
mybook.png, myook.png,mbook.png,maybook.png
我对sql server存储过程非常陌生,所以我尝试了以下方法

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
免责声明:此代码更改表中的数据。请自行决定使用


免责声明:此代码更改表中的数据。请自行决定使用。

即使使用非静态l:\xyz\sfd\string:

UPDATE MyTable SET ColumnNeedUpdate = 
    REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate), 0,
       CHARINDEX('\', REVERSE(ColumnNeedUpdate)) - 1))
WHERE UserId = 2565

即使使用非静态的l:\xyz\sfd\string:

UPDATE MyTable SET ColumnNeedUpdate = 
    REVERSE(SUBSTRING(REVERSE(ColumnNeedUpdate), 0,
       CHARINDEX('\', REVERSE(ColumnNeedUpdate)) - 1))
WHERE UserId = 2565

到目前为止你试过什么吗?你遇到了什么问题?到目前为止你试过什么吗?您遇到了什么问题?如果要删除的前缀不是静态的l:\xyz\sfd\string怎么办?请查看Jérôme的答案,它使用CHARINDEX查找字符串中最后一个反斜杠的位置。@Dan感谢您的回答。帮助我回答我自己的问题,所以我确保参考这个问题。谢谢我对此投了赞成票。如果要删除的前缀不是静态的l:\xyz\sfd\string怎么办?请查看Jérôme的答案,它使用CHARINDEX查找字符串中最后一个反斜杠的位置。@Dan感谢您的回答。帮助我回答我自己的问题,所以我确保参考这个问题。谢谢我对此进行了投票。删除-1否则它将跳过第一个字符删除-1否则它将跳过第一个字符