43/5000 首先,我为我糟糕的英语道歉……我正在尝试用一个程序编写所有表的插入程序。但我有这样的问题。
DECLARE @jsondata varchar(MAX)
Set @jsondata='[{"RecordId":1,"CreatedUser":0,"CreatedDate":"2020-03-26T14:49:21.210","UpdatedDate":"2020-03-26T14:57:33.420","UpdatedUser":0,"Status":true,"IsDeleted":false,"Name":"Oyun Konsolları","Icon":"videogame_asset","Description":"Oyun Konsolları","Order":1}]';
DECLARE @cn nvarchar(50)
DECLARE @dt nvarchar(50)
DECLARE @ml nvarchar(50)
DECLARE @inserttext varchar(MAX)
DECLARE @selecttext varchar(MAX)
DECLARE @jsoncol varchar(MAX)
DECLARE @tablename varchar(50)
SET @tablename = 'Categories'
SET @inserttext = ' INSERT INTO '+@tablename+' ( ';
SET @selecttext = ' SELECT ';
SET @jsoncol = ') WITH (';
DECLARE @schema nvarchar(max) = N''
DECLARE MY_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
WHERE
c.object_id = OBJECT_ID(@tablename)
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @cn,@dt,@ml
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@cn NOT IN('CreatedUser','CreatedDate','UpdatedDate','UpdatedUser','Status','IsDeleted','RecordId','Status','IsDeleted'))
BEGIN
--Do something with Id here
SET @inserttext = @inserttext + '['+@cn + '], ';
SET @selecttext = @selecttext + '['+ @cn + '], ';
IF(@dt = 'varchar' OR @dt='nvarchar' )
BEGIN
SET @jsoncol = @jsoncol + '['+@cn + '] ' + @dt + ' (' +@ml + '), '
END
ELSE
BEGIN
SET @jsoncol = @jsoncol + '['+@cn + '] ' + @dt +', '
END
END
FETCH NEXT FROM MY_CURSOR INTO @cn,@dt,@ml
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
SET @jsoncol = LEFT(@jsoncol, LEN(@jsoncol) - 1)
SET @inserttext = LEFT(@inserttext, LEN(@inserttext) - 1)
SET @selecttext = LEFT(@selecttext, LEN(@selecttext) - 1)
SET @inserttext =@inserttext + ' )';
SET @jsoncol = @jsoncol + ' )';
EXEC( @inserttext + ' '+ @selecttext + ' ' +' FROM OPENJSON('+@jsondata+ @jsoncol);
运行后我得到的错误:
Msg 103, Level 15, State 4, Line 1
以 '{"RecordId":1,"CreatedUser":0,"CreatedDate":"2020-03-26T14:49:21.210","UpdatedDate" 开头的标识符: "2020-03-26T14:57:33.420","UpdatedUser":0,"S' 太长。最大长度为 128。完成时间:2020-09-25T10:42:41.2474477+03:00
29/5000
可能吗 ?
简而言之,是否可以从 json 作为动态 exec 插入表中