freshman2017
Goto Top

Sql Befehl als .Exe?

Guten Tag,

über nachfolgenden Code führe ich einen längeren SQL Befehl mit einer Batch aus:

sqlcmd -E -S SQLSVRBOSTON1\MyDB1 -i C:\Temp\ClearTables.sql

Ich möchte ungern dass User die .sql öffnen können. Gibt es eine Möglichkeit diese wie bspw. Batch to Exe o.ä.?

Content-Key: 521233

Url: https://administrator.de/contentid/521233

Printed on: April 26, 2024 at 11:04 o'clock

Member: emeriks
emeriks Dec 02, 2019 updated at 13:06:08 (UTC)
Goto Top
Hi,
joa. Du könntest ein PowerShell-Script erstellen und in dieses die SQL-Datei als Here-String einfügen. Dann mit den .Net-Befehlen mit diesem SQL-Server verbinden und diese Kommandos ausführen lassen. Wenn das funktioniert, dann kann man dieses PS-Script auch als EXE verpacken lassen.

E.
Member: freshman2017
freshman2017 Dec 02, 2019 at 13:23:57 (UTC)
Goto Top
Zitat von @emeriks:

Hi,
joa. Du könntest ein PowerShell-Script erstellen und in dieses die SQL-Datei als Here-String einfügen. Dann mit den .Net-Befehlen mit diesem SQL-Server verbinden und diese Kommandos ausführen lassen. Wenn das funktioniert, dann kann man dieses PS-Script auch als EXE verpacken lassen.

E.

Vielen Dank für den Hinweis, an ein PowerShell-Script hatte ich auch schon gedacht - hast Du sowas bereits mal erstellt?
Member: freshman2017
freshman2017 Dec 02, 2019 at 13:33:56 (UTC)
Goto Top

Wie könnte ich denn nachfolgenden SQL Befehl in eine PS Skript bekommen? face-smile

IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='User')  
CREATE TABLE USER

	(
	FirstName VARCHAR(40),
	ByName VARCHAR(40),
	LastName VARCHAR(40)
	)

GO

BULK INSERT User
FROM 'C:\ProgramData\MSSQL\test.txt' WITH  
	(
	FIELDTERMINATOR = ';',  
	ROWTERMINATOR = '\n'  
	)

GO
Member: emeriks
Solution emeriks Dec 02, 2019 at 13:35:42 (UTC)
Goto Top
Das habe ich schon beschrieben.

$query = @"  
blablabla
"@  
 
Invoke-Sqlcmd -Query $query -ServerInstance "MyComputer\MainInstance"  
Member: ukulele-7
Solution ukulele-7 Dec 03, 2019 at 08:42:18 (UTC)
Goto Top
Alternativ könntest du den Inhalt der .sql in eine gespeicherte Prozedur packen und nur die aufrufen. Dann sieht der User auch nix vom eigentlichen SQL-Code.