.net 不在Visual Studio的声明中';TableAdapter的查询生成器

.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)); 和

我想使用Visual Studio 2008内置查询生成器为TableAdapter实现一个查询,如下所示(MSSQL 2008):

如何在查询中设置过滤器,以便使用
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)  )