我希望我们能够传递一个id列表并构建一个像
这样的选择语句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制作一个类型?
答案 0 :(得分:0)
正如Sean所提到的,这里有一个小片段,演示了如何在没有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)
<强>返回强>
Id
2f1a5d4b-008a-496e-b0cf-ba8b53224247
bf63102b-0244-4c9d-89ae-bdd7b41f135c
答案 1 :(得分:0)
如果您使用的是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)