UPDATE 쿼리 여러 값업데이트 여러 값을 가진 열
테이블 이름과 열 : 나는 당신이 확신으로
Book
Book_Name| Authors
---------|---------
C# | 1,2
C++ | 3
Java | 2,4
UPDATE 쿼리 여러 값업데이트 여러 값을 가진 열
테이블 이름과 열 : 나는 당신이 확신으로
Book
Book_Name| Authors
---------|---------
C# | 1,2
C++ | 3
Java | 2,4
길고도 짧은 이야기에
Book Author
Book_Name| Authors Author_Name | Author_Id
---------|--------- -----------|----------
C# | A,B A | 1
C++ | C B | 2
Java | B,D C | 3
D | 4
업데이트 예약 표 독서. 이것은 데이터베이스에 대한 나쁜 설계이지만,이 코드는 당신이 필요로하는 것을 얻을 것입니다. 임시 테이블을 만들었습니다. 참고 * 많은 데이터가있는 경우 성능을 향상시킬 수 있지만 많은 데이터가있을 경우 디자인을 기반으로 재 설계해야합니다.
Declare @Book table(Book_name Varchar(100)
,Authors Varchar(100)
)
Declare @Author table(Author_name Varchar(100)
,Author_ID Varchar(100)
)
Insert into @Book
values ('C#','A,B')
,('C++','C')
,('Java','B,D')
Insert into @Author
Values ('A','1')
,('B','2')
,('C','3')
,('D','4')
Declare @CT Int = (SELECT MAX(LEN(Authors)) from @Book)
,@Pos int = 0
While @Pos <= @CT
BEGIN
UPDATE @Book
SET Authors = REPLACE(Authors,Author_name,Author_id)
from @Book b
inner join @Author a
on SUBSTRING(b.Authors,@POS,1) = a.Author_Name
SET @Pos = @Pos + 1
END
select * From @Book
이러한 종류의 데이터는 실제 시나리오에서 기대되지 않습니다.
여기 처리 방법이 있습니다.
Declare @ExecuteNo INT
Select @ExecuteNo = MAX(len(Authors) - len(replace(Authors, ',', ''))) + 1 from Book
WHILE @ExecuteNo > 0
BEGIN
Update b
Set b.Authors = Replace(Authors, a.Author_Name, a.Author_Id) from Book b
cross join Author a
where CHARINDEX(a.author_name, b.Authors) >= 1
SET @ExecuteNo = @ExecuteNo - 1
END
스키마를 표준화해야합니다. 쉼표로 구분 된 값을 단일 열에 포함시키는 것은 좋지 않습니다. – Blorgbeard
데이터베이스를 만들지 않았기 때문에 이미 만들어져 있으므로 변경해야합니다. –
@ A.Konda. . . 이 작업을 수행하는 것보다는 데이터 구조를 수정하는 것이 더 적은 노력입니다. –