【发布时间】:2016-01-07 20:09:44
【问题描述】:
我正在开发一个 SQL Server 2012 存储过程。
我需要返回一个 nvarchar(20) 值列表,但我不知道该怎么做。我试过这个:
- 使用表值参数,但必须是
READONLY。 - 执行选择以返回该列表。但仅限存储过程
返回
INT值。
有什么想法吗?
更新:
这就是我所做的:
CREATE PROCEDURE [dbo].[GetAggregationChildren]
@parentCode nvarchar(20),
@codeLevel tinyint output,
@returnValue int output
AS
declare @childsLevelCount tinyint
, @invalidChildCodesCount int;
set nocount on;
-- ======== VALIDATION ==========
if NULLIF(@parentCode, '') IS NULL
begin
set @returnValue = -19;
return NULL; -- Parameter null or empty.
end
-- Check if parent exists in AGGREGATIONS table.
if not exists (Select top 1 CODE from AGGREGATIONS where CODE = @parentCode)
begin
set @returnValue = -11;
return NULL;
end
set @childsLevelCount = (select count(c.CODE_LEVEL) from CODES c where c.CODE in (Select CODE from AGGREGATION_CHILDS where PARENT_CODE = @parentCode) group by c.CODE_LEVEL);
-- If this aggregation has children codes with different values, it is an error.
if (@childsLevelCount > 1)
begin
set @returnValue = -201;
return NULL;
end
-- =========== CODE =============
set @returnValue = 0;
set @codeLevel = (select c.CODE_LEVEL from CODES c where c.CODE in (Select CODE from AGGREGATION_CHILDS where PARENT_CODE = @parentCode) group by c.CODE_LEVEL);
select CODE from AGGREGATION_CHILDS where PARENT_CODE = @parentCode;
但是,我不知道如何返回这个选择的结果:
select CODE from AGGREGATION_CHILDS where PARENT_CODE = @parentCode;
此存储过程在 SQL Server Management Studio 上返回:
它也返回一个0。我以为存储过程只会返回选择结果。
我需要一个参数中的结果,因为我将在SQLCommand 中使用这样的:
SqlParameter childsParam = new SqlParameter();
childsParam.ParameterName = "@childs";
childsParam.SqlDbType = System.Data.SqlDbType.Structured;
childsParam.Direction = System.Data.ParameterDirection.Input;
childsParam.Value = tvp;
parameters = new List<SqlParameter>();
parameters.Add(childsParam);
SqlConnection connection =
_context.Database.Connection as SqlConnection;
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = storedProcedureName;
cmd.CommandType = CommandType.StoredProcedure;
if (parameters != null)
cmd.Parameters.AddRange(parameters.ToArray());
cmd.Connection = connection;
cmd.ExecuteNonQuery();
connection.Close();
【问题讨论】:
-
@PeterSmith 我检查它是否执行选择并返回所有数据,但我需要将该数据返回到参数中。
-
您的列表中有多少项?实际上,您是否正在尝试将一列返回给调用应用程序?
标签: sql-server stored-procedures