【问题标题】:SQL Update various rows using the replace techniqueSQL 使用替换技术更新各个行
【发布时间】:2013-09-03 12:09:01
【问题描述】:

我需要解决我拥有的表中的 SQL 问题。

我有一个表,其中包含有路线的各种列(以及各种行)。即。

E:\file.xml

我需要做的是,检查至少 10 个非常相似的列,并搜索任何以 E:\ 开头的单词并将其替换为 C:。

有没有可以帮助我做到这一点的查询?还是我必须一一编辑(因为我认为这不是最聪明的方法)。

更新: 表结构

CREATE TABLE [dbo].[CCARD_corporatives](
    [idCorporative] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [pathCFD] [varchar](128) NULL,
    [pathCertificateCFD] [varchar](128) NULL,
    [pathPrivateKeyCFD] [varchar](128) NULL,
 CONSTRAINT [PK_CCARD_corporatives] PRIMARY KEY CLUSTERED 
(
    [idCorporative] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


SET IDENTITY_INSERT [dbo].[CCARD_corporatives] ON
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (19, 'E:\file1.xml', 'E:\fil2e.xml', 'E:\file423.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (33, 'E:\file1.xml', 'E:\filer2.xml', 'E:\file123.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (34, 'E:\file1.xml', 'E:\filedsf.xml', 'E:\fil33e.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (36, 'E:\file1.xml', 'E:\f4sdfile.xml', 'E:\fil44e.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (37, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (38, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (40, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (41, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (42, 'E:\file1.xml', 'E:\filgbvdfe.xml', 'E:\fileg dfegdfs.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (43, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (44, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (49, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (50, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (51, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (52, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (53, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (56, 'E:\file1.xml', 'E:\file0067.xml', 'E:\file4323.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (57, 'E:\file1.xml', 'E:\file4234.xml', 'E:\fil555e.xml')
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (64, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (82, NULL, NULL, NULL)
INSERT [dbo].[CCARD_corporatives] ([idCorporative], [pathCFD], [pathCertificateCFD], [pathPrivateKeyCFD], ) VALUES (83, 'E:\file1.xml', 'E:\file443.xml', 'E:\fil4324e.xml')
SET IDENTITY_INSERT [dbo].[CCARD_corporatives] OFF

【问题讨论】:

  • 你使用的是什么关系型数据库?
  • SQL Server Management Studio 2008 R2
  • 你的表的结构是什么?可能是任何列中的路由值,或者您是否有该值的特定列?
  • 当您说“逐一编辑”时,您是指一个还是一个字段
  • PM 77-1 我的意思是,当您单击编辑前 200 行时,您可以手动编辑任何单元格...所以我不会像 200 个单元格一样逐个编辑一个……

标签: sql replace sql-update rows


【解决方案1】:

如果您想更新实际上具有以 e:\ 开头的任何值的每一列,请尝试以下操作:

UPDATE [CCARD_corporatives]
SET pathCFD = CASE 
            WHEN pathCFD LIKE 'e:\%' 
            THEN REPLACE(pathCFD,'e:\','c:\') 
            ELSE pathCFD 
           END,
         pathCertificateCFD = CASE 
                        WHEN pathCertificateCFD LIKE 'e:\%' 
                        THEN REPLACE(pathCertificateCFD,'e:\','c:\') 
                        ELSE pathCertificateCFD 
                    END,
        pathPrivateKeyCFD = CASE 
                        WHEN pathPrivateKeyCFD LIKE 'e:\%' 
                        THEN REPLACE(pathPrivateKeyCFD,'e:\','c:\') 
                        ELSE pathPrivateKeyCFD 
                    END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多