2012-04-06 7 views
1

Ich habe eine Abfrage, die komplizierter ist, aber im Grunde erstellt eine HTML-Seite für mich.Wie speichere ich die HTML-Ausgabe einer Abfrage in eine Textdatei mit einer Variablen?

DECLARE @indSubject varchar(7) 
SET @indSubject = '61-0036' 

-- LOTS of query stuff here that makes a page. For simplicity 
-- just use this: 

SELECT '<html><body>' + @indSubject + '</body></html>' 

Ich möchte zwei Dinge tun:

  1. Have SQL Server diese irgendwo mit dem Namen @ indSubject.html auf meinem Rechner speichern (zB C: \ TEMP \ HTMLOUTPUT \ 61-0036 .html)
  2. Verschiedene Werte an das @indSubject übergeben (zB 91-0003). Etwas Befehlszeile-ish?

Kann ich dies mit BCP tun? Ein anderer Weg?

Bitte beachten Sie, das ist alles meine persönlichen Sachen und dies wird nicht auf einem Webserver bereitgestellt, so muss ich nicht wirklich viel über Sicherheit, SQL Injection etc. Sorgen machen (zumindest hoffe ich nicht!)

Antwort

2

Sie können SQLCMD verwenden, um dies relativ einfach zu erreichen.

Wenn Sie Ihre vorhandene Abfrage als .sql-Datei speichern, können Sie dies mit SQLCMD ausführen.

Zusätzlich können Sie mit SQLCMD eine Variable in Ihrer .sql-Datei ${indSubject} angeben, die Sie dann über die Befehlszeile bereitstellen können.

schließlich mit dem -o wechseln, können Sie geben die Ergebnisse direkt in eine Datei, und Sie können die Überschriften auf der Ergebnismenge mit der folgenden Umgebung unterdrücken Einstellung:

:SETVAR SQLCMDHEADERS -1

+0

Hallo Mike, wo setze ich die: SETVAR SQLCMDHEADERS -1? In der SQL-Server-Schnittstelle? – user918967

+0

@ user918967 Setzen Sie es an der Spitze Ihrer .SQL-Datei ... [Beispiele hier] (http://msdn.microsoft.com/en-us/library/ms188714.aspx) –

+0

Großartig, Danke! Eine letzte Frage, die Ausgabe ist bei 255 Zeichen abgeschnitten. Die Option -y erlaubt es mir, sie nur auf 8000 Zeichen zu ändern. Meine letzte HTML-Seite ist größer als das, irgendwelche Ideen? – user918967

1

Aus Gründen der meine geistige Gesundheit (und Michaels) hier ist der Code, scheint zu funktionieren:

:SETVAR SQLCMDHEADERS -1 
    DECLARE @indSubject varchar(7) 
    SET @indSubject='$(indSubject)' 

    -- LOTS of query stuff here that makes a page. For simplicity 
    -- just use this: 


    SELECT '<html><body>' + @indSubject + '</body></html>' 

Wenn der Befehl sqlcmd -E -S(Local)\SQLExpress -v indSubject = "61-0022" -dmyDatabase -y 0 -iC:\temp\test4.sql -oC:\temp\out.html verwendet wird, dann wird die Datei out.html wie folgt aussieht:

<html><body>61-0022</body></html> 
    (1 rows affected) 
+0

Das sieht gut aus ... Wenn Sie das '(1 Zeilen betroffen)' loswerden wollen, können Sie 'SET NOCOUNT ON' am Anfang Ihrer .sql Datei hinzufügen, um es loszuwerden ... –

Verwandte Themen