Вставить в ... выбрать столбцы из таблицы .... join #temptable - PullRequest
0 голосов
/ 13 марта 2020

Как видите, я новичок здесь. Также новый для SQL Сервер. Я использую SSMS уже две недели. Так что я учусь и каждый день у меня возникают новые проблемы. Эта проблема, кажется, не большая; Тем не менее, я не могу справиться с этим.

У меня есть строка:

' texttype;commment|texttype2;comment2'

, которую я должен разделить и вставить в комментарии столбца, как новую вставку в существующий столбец таблицы. Я уже использовал SPLIT функцию, которая производит это в #temptable:

items
--------
texttype;commment
texttype2;comment2

Затем я использовал substring и charindex, чтобы получить это в # temptable2:

types                | commentary
---------------------+------------
texttype             | commment
texttype2            | comment2

Мне нужно вставьте этот комментарий и comment2 в указанную c существующую таблицу из этого # temptable2

И вот мой вопрос: как это сделать? Какой тип регистрации использовать? из c таблица назначения имеет более двух столбцов. Не знаю, как определить эту вставку / соединение из # temptable2

Таблица назначения выглядит примерно так:

ID | ID_Jobs | Column for comments | Column for types | A few more columns

Надеюсь, у меня все ясно.

Спасибо за любые помощь

Ответы [ 2 ]

1 голос
/ 13 марта 2020

извините за беспокойство ... уже работает .. я сделал простую ошибку, присоединившись к той же таблице, но проблема не решена .. может быть, это может кому-то помочь, поэтому я прошёл полный код здесь:

GO
ALTER PROCEDURE AddCommentToJobFromString (
        @ID_JOBS int, 
        @CommentString nvarchar(2000),
        @OPERACTIVE INT
        )
AS 
BEGIN
        IF OBJECT_ID('tempdb.dbo.#temp', 'U') IS NOT NULL
        DROP TABLE #temp;

SELECT * into #temp from dbo.Split(@CommentString , '|') as t1
SELECT 
        SUBSTRING(t.items, 1 , CHARINDEX(';',t.items)-1) as typuwag,
        SUBSTRING(t.items,  CHARINDEX(';',t.items)+1, LEN(t.items)) as trescuwagi
INTO #temp2 
FROM #temp t 

INSERT INTO Uwagi (ID_Jobs, Uwaga, ID_TypyUwag, ID_Operatorzy_Creator, ID_Operatorzy_Last, DateCreated, LastModified)
--DECLARE @OPERACTIVE INT = 4628
--DECLARE @ID_JOBS INT = 65141
Select  
        @ID_JOBS,
        t2.trescuwagi,  
        TU.ID,
        @OPERACTIVE,
        @OPERACTIVE,
        getdate(),
        getdate()
        --t2.typuwag




FROM TypyUwag TU
inner join #temp2 t2
ON TU.TypUwagi = t2.typuwag  COLLATE DATABASE_DEFAULT

END
GO
EXEC AddCommentToJobFromString @ID_JOBS = 65141, @CommentString ='qwe;Tech visual check|Kosztorys;Estimate not ready yet', @OPERACTIVE = 4628
0 голосов
/ 13 марта 2020

Вам, безусловно, потребуется изменить это в соответствии с вашей ситуацией (например, имена таблиц, дополнительные столбцы и т. Д. c.), Но я думаю, что это то, что вам нужно.

CREATE TABLE SourceTable
(
    MyString VARCHAR(50)
);

CREATE TABLE TargetTable
(
    TextType VARCHAR(25)
  , Comment VARCHAR(25)
);

INSERT INTO SourceTable
(
    MyString
)
VALUES
('texttype;commment|texttype2;comment2');

SELECT * FROM SourceTable

INSERT INTO TargetTable
(
    TextType
  , Comment
)
SELECT
            LEFT(value, CHARINDEX(';', value) - 1)           AS TextTypeColumn
          , RIGHT(value, LEN(value) - CHARINDEX(';', value)) AS CommentColumn
FROM        SourceTable
CROSS APPLY STRING_SPLIT(MyString, '|');

SELECT * FROM TargetTable;

дб <> скрипка

...