2009-12-28 6 views
5

Lorsque nous avons besoin de la requête de procédures stockées que nous utilisons « sp_helptext ProcedureName »équivalent de sp_helptext pour les tables dans SQL Server

Peut-être quelque chose de similaire fait pour les tables?

+0

@Biswo - je assez bien dû deviner quelle était votre question, il était très difficile à lire. S'il vous plaît confirmer que j'ai bien interprété. –

Répondre

2

Il ne semble pas y avoir d'équivalent direct de sp_helptext qui fonctionnera avec les tables.

Les deux méthodes qui semblent être communes sur différents forums sont:

  1. Utilisez INFORMATION_SCHEMA.COLUMNS et concaténer les résultats dans l'instruction create.
  2. Utiliser un script SQL-DMO

Il y a un article sur la deuxième méthode here

+0

Un couple d'exemples de la première méthode peut être vu à http://social.msdn.microsoft.com/Forums/en/transactsql/thread/28eeb603-1607-4b56-9461-3c0502cbec9c - c'est un peu de SQL bien poilu si –

+0

@Dan F lol - Je suppose que vous avez vérifié le premier résultat pour 'sp_helptext table' dans google aussi bien :) –

+0

@David: Haha, oui, j'avais une idée que ce serait un google facile :-) –

3

S'il vous plaît utiliser followig requête

select * from INFORMATION_SCHEMA.COLUMNS où table_name = 'TableName'

6

Utilisez Alt + F1 lorsque le nom de la table est sélectionné dans une fenêtre de requête.

0

Essayez avec ce SP. Il n'a pas toutes les notations requises pour une table comme les clés primaires et les clés étrangères, mais c'est un début.

CREATE PROCEDURE [dbo].[GeneradorTablas] 
    @Tabla AS VARCHAR(100) 
AS 
BEGIN 
    DECLARE @Script AS VARCHAR(MAX) ='CREATE TABLE [dbo].[' + @Tabla + '](' + CHAR(13) 
    DECLARE @Columnas As TABLE(indice INT, Columna VARCHAR(1000)) 
    INSERT INTO @Columnas 
    SELECT 
     ROW_NUMBER()OVER(ORDER BY C.column_id), 
     ' [' + C.name + '] [' + TY.name + ']' + 
     CASE WHEN 
      TY.name='nvarchar' OR 
      TY.name='nchar' OR 
      TY.name='char' OR 
      TY.name='varbinary' OR 
      TY.name='varchar' OR 
      TY.name='text' THEN 
       '(' + CASE WHEN C.max_length>0 THEN CAST(C.max_length AS VARCHAR(10)) ELSE 'MAX' END + ')' ELSE '' 
     END + 
     CASE WHEN C.is_identity=1 THEN ' IDENTITY(1,1)' ELSE '' END + 
     ' ' + CASE WHEN C.is_nullable=1 THEN 'NULL' ELSE 'NOT NULL' END + ',' 
    FROM SYS.COLUMNS AS C 
     INNER JOIN SYS.TYPES AS TY ON C.system_type_id=TY.system_type_id 
     INNER JOIN SYS.TABLES AS T ON C.object_id=T.object_id 
    WHERE [email protected] 

    DECLARE @i AS INT 
    SELECT @i=MIN(indice) FROM @Columnas 
    WHILE @i IS NOT NULL 
    BEGIN 
     SELECT @Script+=Columna+CHAR(13) FROM @Columnas WHERE [email protected] 
     SELECT @i=MIN(indice) FROM @Columnas WHERE indice>@i 
    END 

    SET @Script=SUBSTRING(@Script,0,LEN(@Script)-1) + CHAR(13) + ')' 
    PRINT @Script 
END 
GO 
Questions connexes