Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中使用IN运算符_Sql_Sql Server - Fatal编程技术网

如何在SQL Server中使用IN运算符

如何在SQL Server中使用IN运算符,sql,sql-server,Sql,Sql Server,如何在SQL Server中使用IN运算符 这是表格结构 Create Table Sample(Id INT,Name Varchar(50)) 当我像这样查询时,我可以得到值 Select * FROM Sample WHERE Id IN ('74','77','79','80') 在执行上述查询时,我无法获取与执行此错误的表getting error相关的记录 DECLARE @s VARCHAR(MAX) SET @s='74','77','79','80' Select *

如何在SQL Server中使用IN运算符

这是表格结构

Create Table Sample(Id INT,Name Varchar(50))
当我像这样查询时,我可以得到值

Select * FROM Sample WHERE Id IN ('74','77','79','80')
在执行上述查询时,我无法获取与执行此错误的表getting error相关的记录

DECLARE @s VARCHAR(MAX)

SET @s='74','77','79','80'

Select * FROM Sample WHERE Id IN (@s)

你用错了方法

用下面的方法

DECLARE @s VARCHAR(MAX)
DECLARE @d VARCHAR(MAX)

SET @s='74 , 77 , 79 , 80'

set @d = 'select * from arinvoice where arinvoiceid in('+@s+')'
exec (@d)

此处
运算符使用整数集合而不是字符串集合中。

您应该使用一个函数返回结果集(采用csv格式并返回表格)


如果您使用的是ADO.NET,则可以避免使用神奇的字符串,只需使用SqlDataRecord即可

或者,如果您使用的是SQLServer2008,也可以通过使用表值参数来避免神奇的字符串


来源:

这可能有助于基本上对其进行调整,但这是正确的方法。在一些情况下,我们应该使用“stringsqlexecs”。这不是我们的问题之一them@user1307481它慢还是不够快?这是两件不同的事情。。。你接受了错误的答案(不是说你应该接受myne)。
SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON 

GO 

ALTER FUNCTION [dbo].[Splitt] (@String    NVARCHAR(4000), 
                               @Delimiter CHAR(1)) 
RETURNS @Results TABLE ( 
  Items NVARCHAR(4000)) 
AS 
  BEGIN 
      DECLARE @Index INT 
      DECLARE @Slice NVARCHAR(4000) 

      SELECT @Index = 1 

      IF @String IS NULL 
        RETURN 

      WHILE @Index != 0 
        BEGIN 
            SELECT @Index = Charindex(@Delimiter, @String) 

            IF @Index <> 0 
              SELECT @Slice = LEFT(@String, @Index - 1) 
            ELSE 
              SELECT @Slice = @String 

            IF ( NOT EXISTS (SELECT * 
                             FROM   @Results 
                             WHERE  items = @Slice) ) 
              INSERT INTO @Results 
                          (Items) 
              VALUES      (@Slice) 

            SELECT @String = RIGHT(@String, Len(@String) - @Index) 

            IF Len(@String) = 0 
              BREAK 
        END 

      RETURN 
  END 
DECLARE @s VARCHAR(MAX)

SET @s='74,77,79,80'

Select * FROM Sample WHERE Id IN (select items from dbo.Splitt(@s,','))