[英]How to store multiple rows returned from SQL command into a nvarchar variable?
我需要模擬一個過程,它返回一個 nvarchar(max) 類型的 OUT 參數。 此參數的值是多行用戶的字符串連接(包含多列,如 id、name、age 等)。
問題是,我所看到的只是建議將 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”
我在這里做錯了什么?
我創建了一個表並插入了如下所述的值:
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)
它運行成功,沒有任何錯誤。 圖片供參考:
它對我有用,請從你這邊嘗試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.