簡體   English   中英

如何將從 SQL 命令返回的多行存儲到 nvarchar 變量中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM