Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टी-एसक्यूएल - पेरेंट और चाइल्ड टेबल में डेटा डालें

यहाँ मेरा समाधान है (उसी उत्तर के आधार पर जिसे मैंने टिप्पणियों में जोड़ा है):

कर्मचारी के लिए एक अस्थायी आईडी रखने के लिए सबसे पहले, आपको अपने यूडीटी में एक और कॉलम जोड़ना होगा:

CREATE TYPE dbo.tEmployeeData AS TABLE 
(
     FirstName NVARCHAR(50),
     LastName NVARCHAR(50),
     DepartmentType NVARCHAR(10),
     DepartmentBuilding NVARCHAR(50),
     DepartmentEmployeeLevel NVARCHAR(10),
     DepartmentTypeAMetadata NVARCHAR(100),
     DepartmentTypeBMetadata NVARCHAR(100),
     EmployeeId int
)
GO

उस नए कर्मचारी आईडी कॉलम के साथ इसे पॉप्युलेट करना:

DECLARE @tEmployeeData tEmployeeData

INSERT INTO @tEmployeeData (FirstName, LastName, DepartmentType,
                            DepartmentBuilding, DepartmentEmployeeLevel,
                            DepartmentTypeAMetadata, DepartmentTypeBMetadata, EmployeeId)
SELECT  
    N'Tom_FN', N'Tom_LN', N'A',
    N'101', N'IV', N'Tech/IT', NULL, 5
UNION
SELECT  
    N'Mike_FN', N'Mike_LN', N'B',
    N'OpenH', N'XII', NULL, N'Med', 6
UNION
SELECT  
    N'Joe_FN', N'Joe_LN', N'A',
    N'101', N'IV', N'Tech/IT', NULL, 7
UNION
SELECT  
    N'Dave_FN', N'Dave_LN', N'B',
    N'OpenC', N'XII', NULL, N'Lab', 8

सम्मिलित करें भाग यहां जाता है

फिर, आप प्रक्रिया में भेजे गए डेटा में कर्मचारी तालिका से सम्मिलित मान को अस्थायी कर्मचारी आईडी में मैप करने के लिए तालिका चर का उपयोग करते हैं:

DECLARE @EmployeeidMap TABLE
(
    temp_id int,
    id int
)

अब, कर्मचारी तालिका को MERGE . के साथ भरने की चाल है INSERT...SELECT . के बजाय स्टेटमेंट क्योंकि आपको आउटपुट क्लॉज में सम्मिलित और स्रोत डेटा दोनों के मूल्यों का उपयोग करना है:

MERGE INTO @MainEmployee USING @tEmployeeData AS sourceData ON 1 = 0 -- Always not matched
WHEN NOT MATCHED THEN
INSERT (FirstName, LastName)
VALUES (sourceData.FirstName, sourceData.LastName)
OUTPUT sourceData.EmployeeId, inserted.EmployeeID 
INTO @EmployeeidMap (temp_id, id); -- populate the map table

उस बिंदु से यह आसान है, आपको @EmployeeidMap पर भेजे गए डेटा से जुड़ना होगा वास्तविक कर्मचारी आईडी प्राप्त करने के लिए:

INSERT INTO @ParentEmployeeDepartment (EmployeeID, DepartmentType)
SELECT Id, DepartmentType
FROM @tEmployeeData 
INNER JOIN @EmployeeidMap ON EmployeeID = temp_id

अब आप डेटा का उपयोग @ParentEmployeeDepartment . में कर सकते हैं ParentEmployeeDepartmentID . में वास्तविक मानों को मैप करने के लिए आपके द्वारा भेजे गए डेटा के लिए:

इन्सर्ट का अब तक परीक्षण करना

SELECT FirstName,
     LastName,
     SentData.DepartmentType As [Dept. Type],
     DepartmentBuilding As Building,
     DepartmentEmployeeLevel As [Emp. Level],
     DepartmentTypeAMetadata As [A Meta],
     DepartmentTypeBMetadata As [B Meta],
     SentData.EmployeeId As TempId, EmpMap.id As [Emp. Id], DeptMap.ParentEmployeeDepartmentID As [Dept. Id]
FROM @tEmployeeData SentData
INNER JOIN @EmployeeidMap EmpMap ON SentData.EmployeeId = temp_id 
INNER JOIN @ParentEmployeeDepartment DeptMap ON EmpMap.id = DeptMap.EmployeeID

परिणाम:

FirstName   LastName    Dept. Type  Building    Emp. Level  A Meta      B Meta  TempId      Emp. Id     Dept. Id
---------   --------    ----------  --------    ----------  ------      ------  ------      ----------- -----------
Dave_FN     Dave_LN     B           OpenC       XII         NULL        Lab     8           1           1
Joe_FN      Joe_LN      A           101         IV          Tech/IT     NULL    7           2           2
Mike_FN     Mike_LN     B           OpenH       XII         NULL        Med     6           3           3
Tom_FN      Tom_LN      A           101         IV          Tech/IT     NULL    5           4           4

मुझे यकीन है कि इस बिंदु से आप आसानी से अंतिम 2 प्रविष्टियों को स्वयं समझ सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर कर्सर प्रकार - KEYSET कर्सर | SQL सर्वर ट्यूटोरियल / TSQL ट्यूटोरियल

  2. SQL सर्वर में @@ SERVERNAME के ​​साथ स्थानीय सर्वर नाम लौटाएं

  3. DATETIMEOFFSETFROMPARTS() SQL सर्वर में उदाहरण (T-SQL)

  4. SQL सर्वर फ़ाइल नाम बनाम संस्करण

  5. SQL सर्वर में आंशिक रूप से उद्धृत CSV फ़ाइल थोक सम्मिलित करें