【发布时间】: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”
我在这里做错了什么?
【问题讨论】: