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

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

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

  1. CREATE TYPE user AS TABLE
  2. ( Id int,
  3. No_user int,
  4. Name nvarchar(30),
  5. // etc.
  6. )

我创建了该过程:

  1. CREATE OR ALTER PROCEDURE some_procedure(
  2. @No_user int,
  3. @List_User nvarchar(max) OUTPUT,
  4. )
  5. AS

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

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

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

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

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

  1. SELECT @List_User = @tmpList

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

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

50few1ms

50few1ms1#

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

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

参考图片:

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

  1. CREATE OR ALTER PROCEDURE some_procedure(
  2. @No_user int,
  3. @List_User nvarchar(max) OUTPUT
  4. )
  5. AS

参考图片:

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

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

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

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

  1. DECLARE @sqlCommand nvarchar(MAX)

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

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

展开查看全部

相关问题