I am trying to run a SQL script from PowerShell (which is on my Windows 10 64-bit desktop) and the database hosted on my computer (SQL Server 2019 DEV).
The script itself should create a database, and my intention is that, when I want to run this, I just modify a variable.
$APPNAME="TEST_DB"
$INSTANCE="TEST_INSTANCE\TESTSQL"
$DATABASECREATE ='CREATE DATABASE [$APPNAME]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N"$APPNAME", FILENAME = N"\\mssql\DATA\$APPNAME.mdf" , SIZE = 4096KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N"$APPNAME_log", FILENAME = N"\\mssql\LOG\$APPNAME_log.ldf" , SIZE = 32768KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [$APPNAME] SET COMPATIBILITY_LEVEL = 120
GO
ALTER DATABASE [$APPNAME] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [$APPNAME] SET ANSI_NULLS OFF
GO
ALTER DATABASE [$APPNAME] SET ANSI_PADDING OFF
GO
ALTER DATABASE [$APPNAME] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [$APPNAME] SET ARITHABORT OFF
GO
ALTER DATABASE [$APPNAME] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [$APPNAME] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [$APPNAME] SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF)
GO
ALTER DATABASE [$APPNAME] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [$APPNAME] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [$APPNAME] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [$APPNAME] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [$APPNAME] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [$APPNAME] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [$APPNAME] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [$APPNAME] SET DISABLE_BROKER
GO
ALTER DATABASE [$APPNAME] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [$APPNAME] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [$APPNAME] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [$APPNAME] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [$APPNAME] SET READ_WRITE
GO
ALTER DATABASE [$APPNAME] SET RECOVERY SIMPLE
GO
ALTER DATABASE [$APPNAME] SET MULTI_USER
GO
ALTER DATABASE [$APPNAME] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [$APPNAME] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO
ALTER DATABASE [$APPNAME] SET DELAYED_DURABILITY = DISABLED
GO
USE [$APPNAME]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N"PRIMARY") ALTER DATABASE [$APPNAME] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO'
Invoke-Sqlcmd -ServerInstance "$INSTANCE" -Query $DATABASECREATE
The error message:
Invoke-Sqlcmd : Incorrect syntax near 'PRIMARY'.
At line:68 char:1
+ Invoke-Sqlcmd -ServerInstance $INSTANCE -Query $DATABASECREATE
I'm pretty new to this as you can see, but other than this, I tried to write a function for it, with no luck. When I search for this specific issue I see so many complex queries, but I just want to execute a SQL query, with 1 variable in PowerShell.
If you can help me, or push me in the right direction I would appreciate it, thank you!