Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
C# tsql“IN”参数的C语法_C#_Sql_Parameter Passing - Fatal编程技术网

C# tsql“IN”参数的C语法

C# tsql“IN”参数的C语法,c#,sql,parameter-passing,C#,Sql,Parameter Passing,在TSQL中,我可以编写: Select * from mytablename M where M.field in (1, 5, 8, 56) 如果我想在参数化c中做同样的事情,语法是什么?SQL Server 2008有一个称为表值参数的功能。您可以在SQL Server中创建一个特殊类型,然后可以将一个DataTable作为参数传递,其中包含所需的所有值 您可以这样使用它: 在DB上执行以下操作:将类型dbo.IntArray创建为表值INT notnull 您的IN查询必须更改为类似

在TSQL中,我可以编写:

Select * from mytablename  M where M.field in (1, 5, 8, 56)

如果我想在参数化c中做同样的事情,语法是什么?

SQL Server 2008有一个称为表值参数的功能。您可以在SQL Server中创建一个特殊类型,然后可以将一个DataTable作为参数传递,其中包含所需的所有值

您可以这样使用它:

在DB上执行以下操作:将类型dbo.IntArray创建为表值INT notnull

您的IN查询必须更改为类似于:CustomerID IN SELECT Value FROM@1

从技术上讲,您可以更改您的查询,甚至在

INNER JOIN @1 Par ON CustomerID = Par.Value
这样做的好处是,您可以创建多列DataTable和表值参数,并同时搜索多个条件


请注意,我的代码过长,因为它是一个基于Microsoft AdventureWorks db的工作示例

你的意思是在@p1、@p2、@p3、@p4中吗?只是我的大脑溢出了。@DeveloperM正常情况下,当一个IN查询中有数百个参数时,这表明您从数据库中获取了一些数据来生成查询参数,用户很少在UI中键入数百个参数。如果数据已经在数据库中,请尝试使用联接或类似方法,而不是获取数据并再次将其传递回数据库。但是是的,它肯定也适用于数百个参数。@JoachimIsaksson可以传递的参数数量有一个上限。我不记得了,但它不是无限的。至少在SQLServer2008上。
INNER JOIN @1 Par ON CustomerID = Par.Value