Как обновить текст Unicode до SQL Сервер из окна запроса - PullRequest
0 голосов
/ 07 февраля 2020

Я использую следующий код:

Это код обновления:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[UpdateDataTable]
    (@TABLEID BIGINT, 
     @QUERY NVARCHAR(MAX), 
     @DATAOBJECT NVARCHAR(MAX)) 
AS
BEGIN
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED

    BEGIN TRANSACTION TX1
        -- DECLARATIONS
        --DECLARE @DTABLE NVARCHAR(MAX) = 'DYNAMIC_Order_C905AE71028F4B0094B94EDAD0026CE2'
        DECLARE @DTABLE NVARCHAR(MAX) = (SELECT DynamicTableId FROM TABLES WHERE Id=@TABLEID)
        --DECLARE @QUERY NVARCHAR(MAX)='qty=4356'
        --DECLARE @DATAOBJECT NVARCHAR(MAX)='{"product":"iPad 2018 pro", "amount":260000}'

        -- BUILDING QUERY
        DECLARE @QUERYSQL NVARCHAR(MAX) = 'SELECT Id AS TableId FROM '+@DTABLE+' WHERE '+@QUERY

        -- RETRIEVING IDS OF UPDATING ROWS
        DECLARE @UPDATING_IDS_TEMP TABLE(TableId BIGINT)

        INSERT INTO @UPDATING_IDS_TEMP 
            EXEC sys.sp_executesql @QUERYSQL

        DROP TABLE IF EXISTS #UPDATING_IDS

        SELECT ROW_NUMBER() OVER (ORDER BY TableId)-1 AS Id, TableId 
        INTO #UPDATING_IDS 
        FROM @UPDATING_IDS_TEMP

        -- UPDATING ROWS
        DECLARE @INDEX BIGINT = 0
        DECLARE @MAX BIGINT = (SELECT COUNT(*) FROM #UPDATING_IDS)

        WHILE(@INDEX < @MAX)
        BEGIN
            --DECLARE @ROWID BIGINT = (SELECT TableId FROM #UPDATING_IDS WHERE Id=@INDEX)
            DECLARE @ROWID BIGINT = 'N'''+ (SELECT TableId FROM #UPDATING_IDS WHERE Id=@INDEX) +''','
            --SELECT @ROWID

            EXEC FN_UpdateFieldByJson @DTABLE, @ROWID, @DATAOBJECT
            SET @INDEX = @INDEX + 1
        END

        SELECT 'Completed'

        COMMIT TRANSACTION T1
END

Это код вставки

/****** Object:  StoredProcedure [dbo].[InsertDataToTable]    Script Date: 2/7/2020 1:57:07 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertDataToTable](@tableId BIGINT, @data NVARCHAR(MAX))
AS
BEGIN

    --DECLARE @tableId BIGINT = 10
    --DECLARE @data NVARCHAR(MAX) = '{"artist":"usher","song name":"test songs"}'
    DECLARE @dynamicTableId NVARCHAR(MAX) = (SELECT dynamicTableId FROM Tables WHERE Id=@tableId)

    DECLARE @insertSql NVARCHAR(MAX)='INSERT INTO '+@dynamicTableId+'('
    DECLARE @keyList NVARCHAR(MAX)=''
    DECLARE @valueList NVARCHAR(MAX)=''

    DROP TABLE IF EXISTS #FIELDS
    SELECT ROW_NUMBER() OVER (ORDER BY [KEY])-1 AS Id,* INTO #FIELDS FROM OPENJSON(@data) 

    DECLARE @fieldCount BIGINT = (SELECT COUNT(*) FROM #FIELDS)
    DECLARE @index BIGINT=0
    WHILE ( @index < @fieldCount)
    BEGIN 
        SET @keyList = @keyList+'['+(SELECT [KEY] FROM #FIELDS WHERE Id=@index)+'],'

        -- ADDING WITHOUT QUOTES IF IT'S A NUMBER
        IF ( (SELECT [TYPE] FROM #FIELDS WHERE Id=@index) = 2 )
        BEGIN
            SET @valueList = @valueList+''+dbo.ZenEncToChar((SELECT [VALUE] FROM #FIELDS WHERE Id=@index))+','
        END
        ELSE
        BEGIN
            SET @valueList = @valueList+'N'''+dbo.ZenEncToChar((SELECT [VALUE] FROM #FIELDS WHERE Id=@index))+''',' 
        END
        SET @index = @index+1
    END
    SET @keyList=SUBSTRING(@keyList,1, LEN(@keyList)-1)
    SET @valueList=SUBSTRING(@valueList,1, LEN(@valueList)-1)
    SET @insertSql = @insertSql + @keyList+') VALUES('+@valueList+')' 
    --SELECT @insertSql
    EXEC sys.sp_executesql @insertSql
    --SELECT ROW_NUMBER() OVER (ORDER BY COLUMN_NAME)-1 AS Id,COLUMN_NAME
    --FROM INFORMATION_SCHEMA.COLUMNS
    --WHERE TABLE_NAME = @dynamicTableId

END

Пользователь не может вставить / обновить ' символ как таблица ввода в таблицы. Так что здесь моя таблица вставки работает отлично, но обновление не работает. Поэтому, пожалуйста, помогите мне

Как обновить текст в Юникоде из окна запроса SQL Server Management Studio?

...