# SQL Server (Prisma ORM v7) (/docs/orm/v7/core-concepts/supported-databases/sql-server) > For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL. Use Prisma ORM with Microsoft SQL Server databases Location: ORM > v7 > Core Concepts > Supported databases > SQL Server Prisma ORM supports Microsoft SQL Server (2017+) databases. ## Setup [#setup] Configure the SQL Server provider in your Prisma schema: ```prisma title="schema.prisma" datasource db { provider = "sqlserver" } ``` Set the connection URL in `prisma.config.ts`: ```typescript title="prisma.config.ts" import { defineConfig, env } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", datasource: { url: env("DATABASE_URL"), // sqlserver://host:1433;database=db;... }, }); ``` ## Using driver adapters [#using-driver-adapters] Use the `node-mssql` JavaScript database driver via [driver adapters](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/database-drivers#driver-adapters): #### bun ```bash bun add @prisma/adapter-mssql ``` #### pnpm ```bash pnpm add @prisma/adapter-mssql ``` #### yarn ```bash yarn add @prisma/adapter-mssql ``` #### npm ```bash npm install @prisma/adapter-mssql ``` ```ts import { PrismaMssql } from "@prisma/adapter-mssql"; import { PrismaClient } from "./generated/prisma"; const config = { server: "localhost", port: 1433, database: "mydb", user: "sa", password: "mypassword", options: { encrypt: true, trustServerCertificate: true, // For self-signed certificates }, }; const adapter = new PrismaMssql(config); const prisma = new PrismaClient({ adapter }); ``` ## Connection details [#connection-details] SQL Server uses JDBC-style connection strings: ``` sqlserver://HOST[:PORT];database=DATABASE;user=USER;password=PASSWORD;encrypt=true ``` **Escaping special characters:** If your credentials contain `: \ = ; / [ ] { }`, wrap values in curly braces: ``` sqlserver://host:1433;user={MyServer/User};password={Pass:Word;};database=db ``` ### Connection string arguments [#connection-string-arguments] | Argument | Default | Description | | ------------------------------ | -------- | -------------------------------------------------------------------- | | `database` / `initial catalog` | `master` | Database name | | `user` / `username` / `uid` | | SQL Server login or Windows username (if using `integratedSecurity`) | | `password` / `pwd` | | Password for user | | `encrypt` | `true` | Use TLS: `true` (always), `false` (login only) | | `integratedSecurity` | | Windows authentication: `true`, `false`, `yes`, `no` | | `schema` | `dbo` | Schema prefix for all queries | | `connectTimeout` | `5` | Seconds to wait for connection | | `socketTimeout` | | Seconds to wait for each query | | `poolTimeout` | `10` | Seconds to wait for connection from pool | | `trustServerCertificate` | `false` | Trust server certificate without validation | | `trustServerCertificateCA` | | Path to CA certificate file (`.pem`, `.crt`, `.der`) | | `ApplicationName` | | Application name for the connection | > [!WARNING] > Prisma ORM v7: Connection pool defaults changed > > Driver adapters use `mssql` driver defaults which differ from v6: > > * **Connection timeout:** `15s` (vs v6's `5s`) > * **Idle timeout:** `30s` (vs v6's `300s`) > > See [connection pool guide](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/databases-connections/connection-pool#sql-server-using-the-mssql-driver) for configuration. ## Windows authentication [#windows-authentication] **Using current Windows user:** ``` sqlserver://localhost:1433;database=sample;integratedSecurity=true;trustServerCertificate=true; ``` **Using specific Active Directory user:** ``` sqlserver://localhost:1433;database=sample;integratedSecurity=true;username=prisma;password=aBcD1234;trustServerCertificate=true; ``` **Named instance:** ``` sqlserver://mycomputer\sql2019;database=sample;integratedSecurity=true;trustServerCertificate=true; ``` ## Type mappings [#type-mappings] | Prisma | SQL Server | | ---------- | ---------------- | | `String` | `NVARCHAR(1000)` | | `Boolean` | `BIT` | | `Int` | `INT` | | `BigInt` | `BIGINT` | | `Float` | `FLOAT(53)` | | `Decimal` | `DECIMAL(32,16)` | | `DateTime` | `DATETIME2` | | `Json` | Not supported | | `Bytes` | `VARBINARY(MAX)` | See [full type mapping reference](https://www.prisma.io/docs/orm/v7/reference/prisma-schema-reference#model-field-scalar-types) for complete details. ## Common considerations [#common-considerations] **UNIQUE constraints:** SQL Server [allows only one `NULL` value per `UNIQUE` constraint](https://learn.microsoft.com/en-us/sql/relational-databases/tables/unique-constraints-and-check-constraints). Use filtered indexes to work around this, but note they cannot be used as foreign keys. **Cyclic references:** With circular model references, you must use [`NoAction` referential actions](https://www.prisma.io/docs/orm/v7/prisma-schema/data-model/relations/referential-actions#special-rules-for-sql-server-and-mongodb) to avoid validation errors. **Raw queries with `VARCHAR` columns:** `String` parameters in raw queries are encoded as `NVARCHAR(4000)` or `NVARCHAR(MAX)`. When querying `VARCHAR(N)` columns, manually cast to avoid index performance issues: ```ts // ❌ Causes implicit conversion await prisma.$queryRaw`SELECT * FROM user WHERE name = ${"John"}`; // ✅ Enables index seek await prisma.$queryRaw`SELECT * FROM user WHERE name = CAST(${"John"} AS VARCHAR(40))`; ``` ## Prisma Migrate caveats [#prisma-migrate-caveats] **Schema names:** SQL Server doesn't have `SET search_path`. Ensure your connection URL schema parameter matches production (typically `dbo`): ``` sqlserver://host:1433;database=db;schema=dbo;... ``` **Destructive changes:** Some operations require table recreation: * Adding/removing `autoincrement()` * Dropping all columns from a table **Shared default values:** Prisma doesn't support SQL Server's `sp_bindefault`. Use per-column defaults instead. ## Local setup [#local-setup] **Windows:** 1. Install [SQL Server 2019 Developer](https://www.microsoft.com/en-us/sql-server/sql-server-downloads) 2. Install [SQL Server Management Studio](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms) 3. Enable TCP/IP in SQL Server Configuration Manager → **Protocols for MSSQLSERVER** 4. (Optional) Enable SQL authentication: **Properties** → **Security** → **SQL Server and Windows Authentication Mode** **Docker:** ```bash docker pull mcr.microsoft.com/mssql/server:2019-latest docker run --name sql_container \ -e 'ACCEPT_EULA=Y' \ -e 'SA_PASSWORD=myPassword' \ -p 1433:1433 \ -d mcr.microsoft.com/mssql/server:2019-latest ``` Connect with: Username `sa`, password `myPassword`, port `1433` ## Related pages - [`Database drivers`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/database-drivers): Learn how Prisma connects to your database using driver adapters - [`MongoDB`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/mongodb): How Prisma ORM connects to MongoDB databases - [`MySQL`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/mysql): Use Prisma ORM with MySQL databases including self-hosted MySQL/MariaDB and serverless PlanetScale - [`PostgreSQL`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/postgresql): Use Prisma ORM with PostgreSQL databases including self-hosted, serverless (Neon, Supabase), and CockroachDB - [`SQLite`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/sqlite): Use Prisma ORM with SQLite databases including local SQLite, Turso (libSQL), and Cloudflare D1