Skip to content

Commit

Permalink
Create Bulk-operations-with-MS-SQL-TVP-parameters.md
Browse files Browse the repository at this point in the history
  • Loading branch information
jacentino authored Dec 6, 2019
1 parent 97f799b commit 4112449
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions docs/Bulk-operations-with-MS-SQL-TVP-parameters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Bulk operations with MS SQL TVP parameters

One of the coolest features of ADO.NET provider are table-valued parameters. They greatly simplify bulk operations.
Create user defined table type, and you can pass data table as parameter, if it reflects the table type structure.
```sql
create type dbo.Tag as table(
postId int not null,
name nvarchar(50) not null
)
```
With SqlFun, you can use TVP-s even easier way, since you can use list of records, instead of a data table:
```fsharp
let updateTags: int -> Tag list -> DataContext -> unit =
sql "delete from tag where postId = @id;
insert into tag (postId, name) select postId, name from @tags"
```
Lists, that are parts of some record, can be used too:
```fsharp
let updateTags: Post -> DataContext -> unit =
sql "delete from tag where postId = @id;
insert into tag (postId, name) select postId, name from @tags"
```
To make this feature available, you have to define sql and storedproc functions using defaults from SqlFun.MsSql instead of SqlFun.Queries:
```fsharp
let createConnection () = new SqlConnection(connectionString)
let generatorConfig = MsSql.createDefaultConfig createConnection
let sql commandText = sql generatorConfig commandText
let proc procName = proc generatorConfig procName
```

0 comments on commit 4112449

Please sign in to comment.