Comment script index, keys, foreign keys dans SQL Server

Je souhaite get les détails de tous les index, keys et foreign keys d'une database dans SQL Server (2008). Comment puis-je faire cela?

Je prévois d'utiliser ceci pour synchroniser ces propriétés à travers quelques bases de données quelque peu similaires.

Je peux utiliser SQL Server Management Studio, mais je ne peux pas effectuer une sauvegarde complète d'une database en raison de ressortingctions définies par l'hébergeur Web.

Question secondaire à laquelle vous n'avez pas besoin de répondre:

Pourquoi ne peut-il pas y avoir quelque chose de similaire au schéma de database dans Mysql qui list simplement toute la structure de la database au format de script SQL text?

    En supposant que vous utilisez au less SQL Server 2005 ou supérieur, vous pouvez utiliser l' Assistant de publication de database pour scripter votre schéma

    Cela peut être utilisé pour générer des scripts pour le schéma uniquement, datatables ou les deux.

    Il s'intègre directement dans Visual Studio 2005 et / ou Visual Web Developer 2005

    Si vous utilisez VS2008, la version v1.2 de l'Assistant de publication SQL est préinstallée. Vous pouvez vérifier ici où l'invoquer.

    Si vous searchz des objects granulaires plus spécifiques au script, vous pouvez également utiliser des scripts générés à partir de l'option Task > Generate Scripts de la database respective.

    Consultez http://www.kodyaz.com/articles/sql-server-script-data-with-generate-script-wizard.aspx pour plus de détails.

    Comment searchr des dependencies de key étrangère dans SQL Server?

    Si vous avez besoin d'un script de T-SQL, utilisez uniquement xp_cmdshell. Par exemple scripting concreate index de concreate view avec SMO et powershell (le résultat est dans la variable @script, vous pouvez l'exécuter avec sp_executesql):

     DECLARE @OUTPUT TABLE (line nvarchar(max)) DECLARE @cmd VARCHAR(8000), @ps VARCHAR(8000), @psLoadAssemblies VARCHAR(8000), @script nvarchar(max) ='' DECLARE @srv nvarchar(max)='<server name>', @ln nvarchar(max)='<login>', @pw nvarchar(max)='<password>', @db nvarchar(max) = '<database>', @schemaName nvarchar(max) = '<schema>', -- without '[' ']' @viewName nvarchar(max) = '<view name>', -- without '[' ']' @indexName nvarchar(max) = '<index name>' -- without '[' ']' SET @psLoadAssemblies = '[System.Reflection.Assembly]::LoadWithPartialName(''Microsoft.SqlServer.SMO'')|Out-Null;' SET @ps='$using=''Microsoft.SqlServer.Management.Smo'';$s=new-object($using+''.Server'') $srv;$c = $s.ConnectionContext;$c.LoginSecure=$false;$c.Login=$ln;$c.Password=$pw; Write-Host ($s.Databases[$db].Views.Item($viewName,$schemaName).Indexes[$indexName].Script())' SET @ps=REPLACE(@ps,'$srv',''''+@srv+'''') SET @ps=REPLACE(@ps,'$ln',''''+@ln+'''') SET @ps=REPLACE(@ps,'$pw',''''+@pw+'''') SET @ps=REPLACE(@ps,'$db',''''+@db+'''') SET @ps=REPLACE(@ps,'$schemaName',''''+@schemaName+'''') SET @ps=REPLACE(@ps,'$viewName',''''+@viewName+'''') SET @ps=REPLACE(@ps,'$indexName',''''+@indexName+'''') SET @cmd = 'powershell -Command "'+@psLoadAssemblies+@ps+'"' exec dev.Msg @cmd INSERT INTO @OUTPUT exec xp_cmdshell @cmd SELECT @script+line FROM @OUTPUT WHERE line is not null PRINT @script 

    PS Pour ceux qui requestnt pourquoi nous pourrions avoir besoin de tels trucs: dans certains scénarios, par exemple "importer des données en utilisant un outil tiers", l'approche "drop-recréer" fonctionne mieux que "activer-désactiver" les objects. appelez "truncate" et si votre table participe à une vue liée au schéma, vous obtiendrez une erreur d'outil tiers (tronquer la table participant aux vues indexées renvoie une erreur, donc nous sums obligés de supprimer la vue avec tous les index avant de l'importer ).

    Comme alternative à la réponse parfaite d'InSane, vous pouvez faire un clic droit sur n'importe quel object dans SSMS pour l'écrire dans un file text ou une window.
    Quelques produits gratuits et non-libres vous y permettent également, y compris WinSQL .

    J'ai vu le commentaire ou la réponse de l'user "dontomoso". Après la traduction en anglais, il semble que l'opération "n'est pas valide en raison de l'état actuel de l'object. (SqlPubWiz)" dans "Assistant de publication de database" est l'erreur rencontrée.

    Après tant d'expériences et d'essais, dans cette application. le nom de la database est sensible à la casse. Mettez la valeur de casse correcte pour le paramètre -d. La solution est simple, changez le nom de schéma par défaut ou le nom de catalogue initial même que "utilisé lors de la création de la database". Par exemple, en créant si playGround est utilisé, utilisez aussi playGround … Playground ou playground ou PlayGround génèrera cette erreur.

    J'espère que cette aide!