error al crear una vista en la base de datos Docker MSSQL [duplicado]
Tengo un problema al ejecutar el script SQL en la imagen de la ventana acoplable. Estoy creando un archivo acoplable que se ve así:
FROM mcr.microsoft.com/mssql/server:2019-latest
USER root
RUN mkdir -p /app/config
WORKDIR /app/config
# Copy all the scripts to create tables, views, etc...
COPY sample_data/ /app/config
EXPOSE 1433
ENV ACCEPT_EULA=Y \
MSSQL_SA_PASSWORD=SuperDup3Rsecre7 \
MSSQL_PID=Express
RUN chmod +x /app/config/entrypoint.sh
RUN chmod +x /app/config/create_db.sh
ENTRYPOINT ["./entrypoint.sh"]
Aquí están mis entrypoint.sh
ycreate_db.sh
# entrypoint.sh
#!/bin/bash
# Start the script to create the DB
/app/config/create_db.sh &
# Start SQL Server
/opt/mssql/bin/sqlservr
# create_db.sh
DBSTATUS=1
ERRCODE=1
i=0
while [[ $DBSTATUS -ne 0 ]] && [[ $i -lt 60 ]] && [[ $ERRCODE -ne 0 ]]; do
i=$i+1
DBSTATUS=$(/opt/mssql-tools/bin/sqlcmd -h -1 -t 1 -U sa -P $MSSQL_SA_PASSWORD -Q "SET NOCOUNT ON; Select SUM(state) from sys.databases")
ERRCODE=$?
sleep 1
done
if [[ $DBSTATUS -ne 0 || $ERRCODE -ne 0 ]]; then
echo "SQL Server took more than 60 seconds to start up or one or more databases are not in an ONLINE state"
exit 1
fi
# Run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -d master -i "ddl_001_tables.sql"
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -d master -i "ddl_002_views.sql"
El primer script que crea todas las tablas funciona bien, pero el segundo script con vistas (solo vistas simples para resaltar el problema)
-- ddl_002_views.sql
create view new_view1 as
select TOP 1 name from sys.tables;
create view new_view2 as
select TOP 1 name from sys.tables;
está fallando debido a:
Msg 156, Level 15, State 1, Server 6f49cec5c8ab, Procedure new_view1, Line 4
Incorrect syntax near the keyword 'create'.
Cuando ejecuto un script ddl_002_views.sql
a través de IDE (en mi caso, DBeaver), funciona bien.
¿Alguien sabe qué estoy haciendo mal o me falta algo? Gracias de antemano.
Aceptado
No está relacionado con Docker, no se pueden seguir las create
declaraciones. Necesitas agregar un GO
entre ellos.
create view new_view1 as
select TOP 1 name from sys.tables;
GO
create view new_view2 as
select TOP 1 name from sys.tables;