복붙노트

[SQL] SQL 서버 WHILE 루프 2008 삽입

SQL

SQL 서버 WHILE 루프 2008 삽입

내가 좋아하는 기록을 기존의 한

ID    Hospital ID     Email                Description 
1       15         abc@e.com           Sample Description
2       15         def@dd.com          Random Text

I는 일정하게 남아있는 (그것은 자동으로 생성되지 ID 같은) 다른 있지만,이 경우, 특정 값 또는 32로 변경 병원 ID와 행을 삽입 while 루프를 사용할 필요가있다.

그것은 다음과 같이한다

ID    Hospital ID     Email                Description 
1       15         abc@e.com           Sample Description
2       15         def@dd.com          Random Text
3       32         abc@e.com           Sample Description
4       32         def@dd.com          Random Text

지금 위는 ID 및 병원 ID 서로 다른 두 개의 새로운 행이 주목하라. ID가 자동으로 생성됩니다.

나는 같은 업데이트를 할 필요가 여러 개의 테이블이있다. 나는 잠시 동안 루프를 사용하여이 작업을 수행 할 수있는 경우 커서를 사용하지 않습니다.

편집하다 간단한 해결책으로 루프를 허용 대답에서 제공하는 동안 버려진.

해결법

  1. ==============================

    1.해당 ID가 가정 ID 열 :

    해당 ID가 가정 ID 열 :

    INSERT INTO TheTable(HospitalID, Email, Description)
    SELECT 32, Email, Description FROM TheTable
    WHERE HospitalID <> 32
    

    SQL로 루프를 방지하려고합니다. 대신 세트의 조건에서 생각하려고합니다.

  2. ==============================

    2.우선 나는 100 % 당신이 특히 생산에 대부분의 경우 SQL에서 루프를 방지해야한다는 존 손더스 동의 말을하고 싶습니다.

    우선 나는 100 % 당신이 특히 생산에 대부분의 경우 SQL에서 루프를 방지해야한다는 존 손더스 동의 말을하고 싶습니다.

    그러나 때때로 테스트 목적 백 레코드 테이블을 채우는 한 번 것대로 루프를 사용하여 자신을 기쁘게하는 단지 OK입니다 이럴.

    귀하의 경우 예를 들어 당신이 사용했던 수있는 별개의 16 및 100와 메이크업 이메일과 설명 사이에 병원 ID를 가진 레코드 테이블을 채 웁니다

    CREATE PROCEDURE populateHospitals
    AS
    DECLARE @hid INT;
    SET @hid=16;
    WHILE @hid < 100
    BEGIN 
        INSERT hospitals ([Hospital ID], Email, Description) 
        VALUES(@hid, 'user' + LTRIM(STR(@hid)) + '@mail.com', 'Sample Description' + LTRIM(STR(@hid))); 
        SET @hid = @hid + 1;
    END
    

    그리고 결과는 것

    ID   Hospital ID Email            Description          
    ---- ----------- ---------------- ---------------------
    1    16          user16@mail.com  Sample Description16 
    2    17          user17@mail.com  Sample Description17 
    ...                                                    
    84   99          user99@mail.com  Sample Description99 
    
  3. from https://stackoverflow.com/questions/15182468/sql-server-2008-insert-with-while-loop by cc-by-sa and MIT license