私はあなたのニーズに合わせて次のスクリプトを書きましたが、あなた自身はさらにロジックを追加する必要があります.次のスクリプトを理解してください.
ダミーテーブルを作成する
CREATE TABLE TBL_TEMPSTRINGS(STRCOL VARCHAR(200),COL1 VARCHAR(50),
COL2 VARCHAR(50),COL3 VARCHAR(50))
テーブルから値を挿入する
INSERT INTO TBL_TEMPSTRINGS
SELECT Contact_assg_list_src From dbo.FBMSRAW
ダミー テーブルの列を更新するストアド プロシージャを作成します。テーブル名を文字列で取得します (使用した場合、ダミー テーブルを一時テーブル名に置き換えることができる理由)。
CREATE PROC SP_SPLITWRODS(@TABLENAME VARCHAR(50),@COLCOUNT INT)
AS
BEGIN
DECLARE @QRY VARCHAR(500)
CREATE TABLE #TBL_TEMP(STRCOL VARCHAR(200))
DECLARE @STRCOL VARCHAR(200)
DECLARE @CURRINDEX INT
DECLARE @TEMP INT
DECLARE @COLINDEX INT
DECLARE @ROWID INT
DECLARE @STRLEN INT
DECLARE @TEMPVALUE VARCHAR(50)
DECLARE @LASTWORD BIT
--CURSOR FOR YOUR TEMP TABLE
DECLARE CUR_TEMP CURSOR LOCAL FOR SELECT STRCOL FROM #TBL_TEMP
--CONSTRUCT QRY FOR FILLING YOUR TABLE
SET @QRY='INSERT INTO #TBL_TEMP SELECT STRCOL FROM ' + @TABLENAME
--FILL TABLE
EXECUTE(@QRY)
OPEN CUR_TEMP
FETCH CUR_TEMP INTO @STRCOL
WHILE @@FETCH_STATUS = 0
BEGIN
SET @CURRINDEX=1
SET @COLINDEX=1
SET @LASTWORD=0
--GET ' ' INDEX
SET @TEMP=CHARINDEX(' ',@STRCOL,@CURRINDEX)
WHILE @TEMP > 0
BEGIN
--YOU WILL GET THE VALUE SEPERATED BY SPACE
SET @TEMPVALUE=SUBSTRING(@STRCOL,@CURRINDEX,@TEMP-@CURRINDEX)
--ADD MORE LOGIC TO UPDATE YOUR COLUMNS (YOUR EXTRA COLUMNS)
--CONTRUCT QRY TO UPDATE CORRESPONDING COL IN YOUR TABLE FOR THE ROW FETCHED
--THIS UPDATES ALL ROWS, YOU NEED TO ADD ONE WHERE CONDITION TO UPDATE THE ROW
SET @QRY='UPDATE ' + @TABLENAME + ' SET COL' + CAST(@COLINDEX AS VARCHAR) + '=''' + @TEMPVALUE + ''''
EXEC(@QRY)
--INCREMENT COL INDEX AFTER UPDATE OF LAST COLUMN
SET @COLINDEX=@COLINDEX+1
SET @CURRINDEX=@TEMP+1
SET @TEMP=CHARINDEX(' ',@STRCOL,@CURRINDEX)
IF @TEMP=0 AND @LASTWORD=0
BEGIN
SET @TEMP=LEN(@STRCOL)+1
SET @LASTWORD=1
END
END
FETCH CUR_TEMP INTO @STRCOL
END
CLOSE CUR_TEMP
DEALLOCATE CUR_TEMP
END
プロシージャを実行します
EXEC SP_SPLITWRODS 'TBL_TEMPSTRINGS',1
更新されたダミー テーブルを表示する
SELECT * FROM TBL_TEMPSTRINGS
現在、スペースで区切られた 3 つの列を更新しています。受け取った文字列 (スペースで区切られた) に基づいて列を更新するには、独自のロジックを追加する必要があります。
それが役に立てば幸い