.net 不在Visual Studio的声明中';TableAdapter的查询生成器
我想使用Visual Studio 2008内置查询生成器为TableAdapter实现一个查询,如下所示(MSSQL 2008): 如何在查询中设置过滤器,以便使用.net 不在Visual Studio的声明中';TableAdapter的查询生成器,.net,sql,sql-server,visual-studio,query-builder,.net,Sql,Sql Server,Visual Studio,Query Builder,我想使用Visual Studio 2008内置查询生成器为TableAdapter实现一个查询,如下所示(MSSQL 2008): 如何在查询中设置过滤器,以便使用myTableAdapter.getDataExceptUniqueId(…)函数调用它 我试图将过滤器设置为不在(@ids)中,并用 string[] uniqueIds = ...; myTableAdapter.GetDataExceptUniqueIds(String.Join("','", uniqueIds)); 和
myTableAdapter.getDataExceptUniqueId(…)
函数调用它
我试图将过滤器设置为不在(@ids)
中,并用
string[] uniqueIds = ...;
myTableAdapter.GetDataExceptUniqueIds(String.Join("','", uniqueIds));
和
StringBuilder sb = new StringBuilder("'");
sb.Append(String.Join("','", uniqueIds));
sb.Append("'");
return myTableAdapter.GetDataExceptUniqueIds(sb.ToString());
但是两个都失败了您不能在选择中使用动态参数。。。列表中[未]的位置 解决方法: 创建一个表函数,类似于以下函数:
CREATE FUNCTION dbo.ParmsToTable(@Parameters varchar(4000))
returns @result TABLE (Value varchar(100))
AS
begin
DECLARE @pTable table
(
Value varchar(100)
)
DECLARE @Value varchar(100), @Pos int
SET @Parameters = LTRIM(RTRIM(@Parameters))+ ','
SET @Pos = CHARINDEX(',', @Parameters, 1)
IF REPLACE(@Parameters, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Value = LTRIM(RTRIM(LEFT(@Parameters, @Pos - 1)))
IF @Value <> ''
BEGIN
INSERT INTO @pTable (Value) VALUES (@Value)
END
SET @Parameters = RIGHT(@Parameters, LEN(@Parameters) - @Pos)
SET @Pos = CHARINDEX(',', @Parameters, 1)
END
END
INSERT @result
SELECT value
FROM @pTable
RETURN
END
您不能在选择中使用动态参数。。。列表中[未]的位置 解决方法: 创建一个表函数,类似于以下函数:
CREATE FUNCTION dbo.ParmsToTable(@Parameters varchar(4000))
returns @result TABLE (Value varchar(100))
AS
begin
DECLARE @pTable table
(
Value varchar(100)
)
DECLARE @Value varchar(100), @Pos int
SET @Parameters = LTRIM(RTRIM(@Parameters))+ ','
SET @Pos = CHARINDEX(',', @Parameters, 1)
IF REPLACE(@Parameters, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Value = LTRIM(RTRIM(LEFT(@Parameters, @Pos - 1)))
IF @Value <> ''
BEGIN
INSERT INTO @pTable (Value) VALUES (@Value)
END
SET @Parameters = RIGHT(@Parameters, LEN(@Parameters) - @Pos)
SET @Pos = CHARINDEX(',', @Parameters, 1)
END
END
INSERT @result
SELECT value
FROM @pTable
RETURN
END
select * from [MyDB].[dbo].[MyView] where UNIQUE_ID NOT IN
(select value from dbo.ParmsToTable(@p) )