我需要模拟一个过程,它返回一个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”
我哪里做错了?
1条答案
按热度按时间50few1ms1#
我创建了一个表并插入了如下所述的值:
参考图片:
我创建了如下所述的存储过程:
参考图片:
我用下面的代码创建了sql命令,将多行存储到一个nvarchar类型的字符串中。
我得到了同样的错误,因为你上面提到的图片供参考:
我将@sqlcommand的数据类型从“varchar”更改为“nvarchar”,如下所述
运行成功,无任何错误。参考图片:
它为我工作,请尝试从你的结束。