2016-02-08 109 views
1

SQL Server具有表值參數,它允許您傳遞值數組作爲參數。相當於SQL Server的TVP的PostgreSQL

什麼是此時,相應的方式來實現類似於PostgreSQL的查詢的東西,所以我可以做這樣的事情:

select * from product where id in ($1)

我使用.NET Npgsql的圖書館。在documetation

expression IN (value [, ...]) 
expression IN (subquery) 

閱讀:

https://www.nuget.org/packages/Npgsql/3.0.5

+1

也許更詳細的解釋會有所幫助;你的例子中哪裏有$ 1?你能在MS SQL中提供一個完整的例子嗎? – IMSoP

+0

好點@IMSoP,我已經將該信息添加到問題中。使用.NET庫。 – Phill

+1

在PostgreSQL中,您可以使用數組而不是ID列表:'... where id = any($ 1 :: int [])'其中$ 1是一個字符串參數,看起來像{{1,2,3}}不確定C#是直接支持數組參數的。 – Abelisto

回答

2

在PostgreSQL,您可以使用數組來代替ID列表中,如:

... where id = any('{1, 2, 3}'::int[]) 

... where id = any(array[1, 2, 3]) 

這意味着id是數組的項目之一。

Read more about arrays operators and functions.

要通過數組作爲來自第三方的語言,你可以使用至少第一變體的參數:

... where id = any($1 ::int[]) 

其中$ 1是一個字符串參數看起來像{1, 2, 3}。請注意,$1::int[]之間的空格 - 對某些客戶可能是必需的。

不確定C#是否直接支持數組參數。

+0

請注意,Npgsql支持數組類型,所以你絕對可以從C# –

1

在Postgres裏,你可以通過兩種方式使用IN操作符 first variantsecond variantthis overview

+0

我試圖找出它是否可能作爲參數傳遞。對於使用TVP的SQL Server,您可以執行'where id in(從@ListOfIds選擇id)',否則在PostgreSQL中,我必須每次使用Id列表生成查詢。 – Phill