78 lines
2.2 KiB
Transact-SQL
78 lines
2.2 KiB
Transact-SQL
CREATE FUNCTION [dbo].[FN_SPLIT_STRING]
|
|
(
|
|
@Input NVARCHAR(MAX),
|
|
@Character CHAR(1)
|
|
)
|
|
RETURNS @Output TABLE (
|
|
Item NVARCHAR(1000)
|
|
)
|
|
AS
|
|
BEGIN
|
|
DECLARE @StartIndex INT, @EndIndex INT
|
|
|
|
SET @StartIndex = 1
|
|
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
|
|
BEGIN
|
|
SET @Input = @Input + @Character
|
|
END
|
|
|
|
WHILE CHARINDEX(@Character, @Input) > 0
|
|
BEGIN
|
|
SET @EndIndex = CHARINDEX(@Character, @Input)
|
|
|
|
INSERT INTO @Output(Item)
|
|
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
|
|
|
|
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
|
|
END
|
|
|
|
RETURN
|
|
END
|
|
|
|
GO
|
|
|
|
--FUNKTION ZUR AKTUALISIERUNG der DATEN
|
|
|
|
|
|
BEGIN
|
|
DECLARE
|
|
@GUID INTEGER,
|
|
@CONTROL_ID INTEGER,
|
|
@RECORD_ID INTEGER,
|
|
@VALUE VARCHAR(MAX),
|
|
@NEW_VALUE VARCHAR(MAX),
|
|
@INDEX INTEGER,
|
|
@ADDED_WHO VARCHAR(50)
|
|
|
|
DECLARE c_Values CURSOR FOR
|
|
SELECT GUID,CONTROL_ID,RECORD_ID,VALUE,ADDED_WHO FROM TBPMO_CONTROL_VALUE WHERE VALUE LIKE '%;%' AND CONTROL_ID NOT IN (SELECT GUID FROM TBPMO_CONTROL WHERE CONTROL_TYPE_ID = 2) ORDER BY RECORD_ID,CONTROL_ID
|
|
OPEN c_Values
|
|
FETCH NEXT FROM c_Values INTO @GUID,@CONTROL_ID,@RECORD_ID,@VALUE,@ADDED_WHO
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @INDEX = 0
|
|
--#####
|
|
DECLARE c_NEWVALUES CURSOR FOR
|
|
SELECT Item FROM dbo.FN_SPLIT_STRING(@VALUE, ';')
|
|
OPEN c_NEWVALUES
|
|
FETCH NEXT FROM c_NEWVALUES INTO @NEW_VALUE
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @NEW_VALUE = LTRIM(@NEW_VALUE)
|
|
IF @INDEX = 0
|
|
UPDATE TBPMO_CONTROL_VALUE SET VALUE = @NEW_VALUE WHERE GUID = @GUID
|
|
ELSE
|
|
INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID,RECORD_ID,VALUE,ADDED_WHO) VALUES
|
|
(@CONTROL_ID,@RECORD_ID,@NEW_VALUE,@ADDED_WHO)
|
|
PRINT CONVERT(VARCHAR(5),@CONTROL_ID) + '#' + CONVERT(VARCHAR(5),@INDEX) + '-' + @NEW_VALUE
|
|
SET @INDEX = @INDEX + 1
|
|
FETCH NEXT FROM c_NEWVALUES INTO @NEW_VALUE
|
|
END
|
|
CLOSE c_NEWVALUES
|
|
DEALLOCATE c_NEWVALUES
|
|
--#####
|
|
FETCH NEXT FROM c_Values INTO @GUID,@CONTROL_ID,@RECORD_ID,@VALUE,@ADDED_WHO
|
|
END
|
|
CLOSE c_Values
|
|
DEALLOCATE c_Values
|
|
END |