我想使用SQL Server2012创建一个存储过程,该存储过程传递一个字符串列表并检查每个条目。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
使用XML将逗号分隔的值转换为表格。使用此更新的过程。
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 IN ( SELECT Split.a.value('.', 'VARCHAR(100)') AS CVS FROM ( SELECT CAST ('<M>' + REPLACE(@viewMap, ',', '</M><M>') + '</M>' AS XML) AS CVS ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a) )