spring 如何将SQL命令返回的多行存储到nvarchar变量中?

3pvhb19x  于 2022-12-10  发布在  Spring
关注(0)|答案(1)|浏览(135)

我需要模拟一个过程,它返回一个nvarchar(max)类型的OUT参数。这个参数的值是用户的多个行的字符串连接(包含多个列,如id、name、age等)。
问题是,我看到的只是建议将SELECT命令的结果存储在多行的signe列上。我需要对多行执行SELECT,但要对它们的所有列值执行SELECT(最有可能使用SELECT *)。
我创建了一个名为User的表类型。

CREATE TYPE user AS TABLE
(   Id int,
    No_user int,
    Name nvarchar(30),
    // etc.
    )

我创建了该过程:

CREATE OR ALTER PROCEDURE some_procedure(
    @No_user int,
    @List_User nvarchar(max) OUTPUT,
    )

    AS

然后在该过程中,我声明一个user类型的变量并插入值:

DECLARE @userList user
INSERT INTO @userList Values (1,1,"John",..), (2,2,"Jane",..)

然后我创建了这个命令,使用Stuff将结果收集成nvarchar格式:

DECLARE @sqlCommand varchar(MAX)
DECLARE @tmpList varchar(MAX)
SELECT @sqlCommand = STUFF ((SELECT ',*' FROM @userList FOR XML PATH(''), type).value('.', 'nvarchar(max)')
    , 1, 2, '')
EXECUTE sp_executesql @sqlCommand, N'@tmpList varchar(max) output', @tmpList output

然后使用SELECT将@tmpList存储到@List_User中:

SELECT @List_User = @tmpList

我正在测试该过程,但遇到以下错误:
过程需要“ntext/nchar/nvarchar”类型的参数“@statement”。数据库服务器中出现了一个嵌套的异常。过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”

过程需要“ntext/nchar/nvarchar”类型的参数“@params”。数据库服务器中出现了一个嵌套的异常。过程需要“ntext/nchar/nvarchar”类型的参数“@params”
我哪里做错了?

50few1ms

50few1ms1#

我创建了一个表并插入了如下所述的值:

CREATE  TABLE Users 
(   Id int,
    No_user int,
    Name nvarchar(30),
    
)
INSERT INTO Users Values (1,1,N'John'), (2,2,N'Jane')

参考图片:

我创建了如下所述的存储过程:

CREATE OR ALTER PROCEDURE some_procedure(
    @No_user int,
    @List_User nvarchar(max) OUTPUT
    )

    AS

参考图片:

我用下面的代码创建了sql命令,将多行存储到一个nvarchar类型的字符串中。

DECLARE @sqlCommand varchar(MAX)
DECLARE @tmpList varchar(MAX)
SELECT @sqlCommand = STUFF ((SELECT '*' FROM Users FOR XML PATH(''), type).value('.', 'nvarchar(max)')
    , 1, 2, '')
EXECUTE sp_executesql @sqlCommand, N'@tmpList varchar(max) output', @tmpList output

我得到了同样的错误,因为你上面提到的图片供参考:

我将@sqlcommand的数据类型从“varchar”更改为“nvarchar”,如下所述

DECLARE @sqlCommand nvarchar(MAX)

运行成功,无任何错误。参考图片:

它为我工作,请尝试从你的结束。

相关问题