Tjenare, Med hjälp av SQLDMO så kan man relativt enkelt skapa sql-script för objekten i en databas. Genom att göra det i ett vbscript så kan du ju enkelt skapa ett jobb för det i SQL Server. Hej och tack för snabbt svar. Jag är inte helt säker på att jag förstår hur du menar. Tanken är att jag vill fånga upp de förändringar som har skett på alla object dagligen. På installationsskivan för SQL Server så finns det en mängd exempel för bla SQLDMO, dessa exempel finns även listade i SQL Server Books Online. Sök på "SQL-DMO Samples" så hittar du dem. Well, du har två problem här. Dels vill du scripta förändringarna på databaserna och dels vill du göra detta enligt ett schema. Eftersom scripten sparas som textfiler, är det lätt att jämföra dagens script med scripten från dagen innan. Skriv ett vb-program som kör både dmo-jobbet och jämförelsen och sparar både hela scriptet och förändringsscriptet. Problemet är att även om du diffar två create-script så får du ju inte ett Alter-script :-) Nej, men det framgår inte av frågan att det är Alter-script som efterfrågas, utan endast att förändringar ska fångas upp. :)Script SQL Server
jag skulle vilja skripta ut samtliga obejct (ej data) i en databas till fil. Problemet jag har är att jag skulle vilja schedulera detta jobb att köra varje natt tex.
Någon som har en lösning på detta?
\PeterSv: Script SQL Server
/MarcusSv:Script SQL Server
Har du ett exempel på ett sådant vbscript skulle det vara kanon.
\PeterSv: Script SQL Server
Ett av exemplen är en fullständig VB6-app som kan scripta valda delar från en databas.
Följande exempel är ett vbscript vars kod jag tagit från exemplet och moddat lite.
<code>
Option Explicit
Dim goSQLServer 'As SQLDMO.SQLServer
Dim oDatabase 'As SQLDMO.Database
Dim oTable 'As SQLDMO.Table
Dim oView 'As SQLDMO.View
Dim oStoredProc 'As SQLDMO.StoredProcedure
Dim oUser 'As SQLDMO.User
Dim oDBRole 'As SQLDMO.DatabaseRole
Dim flag 'As SQLDMO_SCRIPT_TYPE
Dim sScript 'As String
Set goSQLServer = CreateObject("SQLDMO.SQLServer")
' Logga in i din SQL Server
goSQLServer.LoginSecure = True ' Trusted login, false för standard login. False är default
goSQLServer.Connect "server"
'goSQLServer.Connect "server","userid","password" ' Standard login
' Välj databas
Set oDatabase = goSQLServer.Databases("Pubs")
' flag styr hur tabellerna skall scriptas, det är bara att or'a ihop dem
flag = 4 'SQLDMOScript_Default
flag = flag Or 73736 'SQLDMOScript_Indexes
flag = flag Or 520093696 'SQLDMOScript_DRI_AllConstraints
flag = flag Or 16 'SQLDMOScript_Triggers
flag = flag Or 134217728 'SQLDMOScript_DRI_ForeignKeys
' Scripta tabellerna
For Each oTable In oDatabase.Tables
If Not oTable.SystemObject Then
sScript = sScript & oTable.Script(flag)
End If
Next
' Vyerna
For Each oView In oDatabase.Views
sScript = sScript & oView.Script
Next
' Procedurerna
For Each oStoredProc In oDatabase.StoredProcedures
sScript = sScript & oStoredProc.Script
Next
' Scriptet för alla objekt finns nu i sScript
</code>
Du får själv kompletera koden med det som behövs för att spara scriptet till fil, eller varför inte till en tabell.
/MarcusSv: Script SQL Server
När det gäller att scripta databasförändringar så har du nog tyvärr (mig veterligen) ingen nytta av SQL-Serverns egna scriptning (eller SQL-DMO, samma scriptmotor). Det finns produkter, t ex Red-Gate SQL Compare (www.redgate.com), som är gjorda för att scripta skillnader mellan två databaser, men i alla fall Redgates produkt är inte gratis. Har själv köpt den och kan rekommendera den för det ändamålet.
När det sedan gäller schemaläggningen så krävs det antagligen att man kan styra programmet ifråga med commandlineparametrar eller att man på något sätt kan accessa programmets komponenter i en utvecklingsmiljö för att själv skriva en liten applikation som gör jobbet åt en. När det gäller Redgate så klarar den både dessa alternativ. De skickar med .Net assemblies som du kan styra scriptningen med manuellt för största flexibilitet. Jag ska dock erkänna att jag inte själv utnyttjat denna möjlighet, så jag vet inte hur lätt det är.
Har ingen erfarenhet av andra produkter så därför kan jag inte jämföra priser/kvalitet/funktionalitet med andra produkter.Sv:Script SQL Server
/Pelle Sv: Script SQL Server
Sv:Script SQL Server
Om man vill ha Alter-script så får man lägga ner ett par timmar till på sitt vb-program. Dock gäller detta bara för tabeller. För vyer, triggers och lagrade procedurer fungerar det utmärkt att köra först drop, sen create och sist grant.
/Pelle