【发布时间】:2015-02-16 12:06:08
【问题描述】:
使用 SQL Server 2012,我想创建一个存储过程,它传入一个字符串列表并检查每个条目。Iv 将该列表添加到一个逗号分隔的字符串“UserGroupsAllowedToViewMap”中。这适用于一个条目,但我需要检查它的多个条目。
public DataTable GetMapsWithWorkspaceForUserGroups(int workspaceID, string UserGroupsAllowedToViewMap)
{
DataTable mapDets = new DataTable();
SqlCommand oComm = new SqlCommand();
SqlParameter spParam_WrkSpaceId = new SqlParameter();
SqlParameter spParam_ViewMap = new SqlParameter();
SqlParameter[] spParams = new SqlParameter[2];
SqlDataAdapter daUserMaps = new SqlDataAdapter();
try
{
spParam_WrkSpaceId.ParameterName = "@workspaceID";
spParam_WrkSpaceId.Value = workspaceID;
spParams[0] = spParam_WrkSpaceId;
spParam_ViewMap.ParameterName = "@ViewMap";
spParam_ViewMap.Value = UserGroupsAllowedToViewMap;
spParams[1] = spParam_ViewMap;
oComm = CreateCommand("GetWorkspaceMapDetailsForUserByGroups", spParams, TypeOfConnectionString.GeoAppBuilder);
daUserMaps.SelectCommand = oComm;
daUserMaps.Fill(mapDets);
}
catch (Exception e)
{
throw (e);
}
finally
{
CloseConnection();
}
return mapDets;
}
USE [App]
GO
/****** Object: StoredProcedure [dbo].[GetWorkspaceMapDetailsForUserByGroups] Script Date: 16/02/2015 10:37:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetWorkspaceMapDetailsForUserByGroups]
@workspaceID int,
@viewMap nvarchar(256)
AS
SELECT
m.*
FROM
GeoAppMapDef m
WHERE
m.workspaceID = @workspaceID
and m.IsDeleted = 0
and m.ViewMap = @viewMap
我不确定如何遍历 SQL 中的字符串。我看过Passing List<> to SQL Stored Procedure 和C# SQL Server - Passing a list to a stored procedure,但仍然没有更聪明。任何帮助表示赞赏。
【问题讨论】:
-
不要传递字符串。这从来都不是一个好主意。您可以传递带有所需值的表值参数,并将其视为存储过程中的表。事实上,您发布的两个链接都提出了这一点。您在实施它们时遇到问题吗?如果是这样,您需要找到解决此问题的方法,而不是放弃好的解决方案并回到......不太好的解决方案。
标签: c# sql stored-procedures sql-server-2012