Я использую следующий код:
Это код обновления:
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?