- Documentation
Microsoft SQL Server integration
Run parameterized queries and insert, update, upsert, and delete rows in a client's SQL Server database from inside a workflow.
What it does
The Microsoft SQL Server integration lets your agency read and write a client's SQL Server database directly from a workflow. Connect the database once with a connection string or discrete host, port, user, password, and database, and your workflows can run a parameterized query, insert a row, update or delete rows by an equality filter, and upsert a row with a parameterized MERGE. Connection details are encrypted at rest, every value you pass is bound as a parameter rather than spliced into the SQL, and results are capped so a large read cannot overwhelm a run.
Connect a SQL Server database
- Open your workspace in TaskJuice and add a SQL Server connection on the node that uses it.
- Paste a connection string, for example
sqlserver://user:password@db.example.com:1433/appdb. - Or fill in the host, port (1433 by default), user, password, and database separately. Connections are encrypted and validate the certificate by default.
- Save the connection. The password and connection string are stored encrypted and are never shown again or written to run output.
Provision a least-privilege SQL login scoped to the tables the workflow touches, and expose the database on a public host the workflow can reach over TLS. Private and internal addresses are blocked.
Actions
mssql/queryruns a SQL statement with@p1, @p2, …placeholders and a matchingparamsarray, returning the result rows and the row count.mssql/insertinserts a row from a column-to-value map.mssql/updateupdates the rows matching an equality filter, setting new column values, and returns the affected row count.mssql/upsertinserts a row or, on a match with the columns you name, updates it using a parameterizedMERGE.mssql/deletedeletes the rows matching an equality filter and returns the deleted row count.
Write a safe query
Always pass values through params, never by building the SQL string yourself:
sql: SELECT id, email FROM customers WHERE status = @p1 AND created_at > @p2
params: ["active", "2026-01-01"]Table and column names in the insert, update, upsert, and delete actions are validated against a strict allowlist and quoted for you, so a name containing a bracket, semicolon, or whitespace is rejected before the statement runs.
Known limitations
- The query action returns at most 1,000 rows and around 5 MB per call; when a read is clipped the result sets
truncatedtotrue. UseTOPand aWHEREclause to keep reads bounded. - A statement that runs longer than 30 seconds is cancelled by the database. Keep queries indexed and selective.
- Connections are short-lived: each action opens and closes its own connection.
- Database triggers (reacting to new or changed rows) are not part of this integration; it provides read and write actions only.