【问题标题】:How to store multiple rows returned from SQL command into a nvarchar variable?如何将从 SQL 命令返回的多行存储到 nvarchar 变量中?
【发布时间】:2022-12-19 14:52:24
【问题描述】:

我需要模拟一个过程,它返回一个 nvarchar(max) 类型的 OUT 参数。此参数的值是多行用户的字符串连接(包含多列,如 id、name、age 等)。

问题是我所看到的只是建议将 SELECT 命令的结果存储在多行的符号列上。我需要对多行执行 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

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

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”。嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”

或者

过程需要类型为“ntext/nchar/nvarchar”的参数“@params”。嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:过程需要类型为“ntext/nchar/nvarchar”的参数“@params”

我在这里做错了什么?

【问题讨论】:

    标签: java sql spring azure


    【解决方案1】:

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

    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)
    

    它运行成功,没有任何错误。 图片供参考:

    它对我有用,请从你这边尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 2023-04-02
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多