Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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# 如何将字符串列表传递给dapper以从中选择值_C#_Sql Server_Dapper - Fatal编程技术网

C# 如何将字符串列表传递给dapper以从中选择值

C# 如何将字符串列表传递给dapper以从中选择值,c#,sql-server,dapper,C#,Sql Server,Dapper,我想让我们简洁地传递一个id列表,并构建一个select语句,如 SELECT Id FROM (VALUES ('2f1a5d4b-008a-496e-b0cf-ba8b53224247'), ('bf63102b-0244-4c9d-89ae-bdd7b41f135c')) AS tenantWithFile(Id) WHERE NOT exists( SELECT [Id] FROM [dbo].[TenantDetail]AS td WHERE td.Id = tenant

我想让我们简洁地传递一个id列表,并构建一个select语句,如

SELECT Id FROM (VALUES
('2f1a5d4b-008a-496e-b0cf-ba8b53224247'),
('bf63102b-0244-4c9d-89ae-bdd7b41f135c')) AS tenantWithFile(Id)
WHERE   NOT exists( SELECT [Id]

  FROM [dbo].[TenantDetail]AS td
  WHERE td.Id = tenantWithFile.Id
)

我从中获取列表中不在数据库中的项。有没有一个简单的方法可以不用为TVP创建一个类型就可以做到这一点呢?

正如肖恩所提到的,这里有一个小片段,演示了如何在没有TVF的情况下解析分隔字符串。。。很容易合并到您的查询中

示例

Declare @YourList varchar(max)='2f1a5d4b-008a-496e-b0cf-ba8b53224247,bf63102b-0244-4c9d-89ae-bdd7b41f135c'

Select Id = xmlnode.n.value('(./text())[1]', 'varchar(max)')
 From  (values (cast('<x>' + replace(@YourList,',','</x><x>')+'</x>' as xml))) xmldata(xd)
 Cross Apply xd.nodes('x') xmlnode(n)

如果您使用的是Azure SQL或SQL Server 2016+,则只需传递一个JSON数组,然后使用OPENJSON将该数组转换为表

DECLARE @j AS NVARCHAR(max) = '["2f1a5d4b-008a-496e-b0cf-ba8b53224247", "bf63102b-0244-4c9d-89ae-bdd7b41f135c"]';
SELECT [value] FROM OPENJSON(@j)

您必须传入一个带分隔符的字符串,然后使用动态sql或解析该字符串。TVP是一种更简单、更高效的解决方案。这种方法有什么问题?@SeanLange我的TVP问题是在查询运行时必须创建一个类型。我正在寻找一种设置表变量的方法,但这似乎也不是一个选项。不确定“在查询运行时创建类型”是什么意思。TVP需要一个定义正确的表类型?这是正确的。必须先定义表类型,然后才能将其作为参数发送。
DECLARE @j AS NVARCHAR(max) = '["2f1a5d4b-008a-496e-b0cf-ba8b53224247", "bf63102b-0244-4c9d-89ae-bdd7b41f135c"]';
SELECT [value] FROM OPENJSON(@j)