2009-12-28 20 views
5

cuando necesitamos la consulta de los procedimientos almacenados que utilizamos 'ProcedureName sp_helptext'Equivalente de sp_helptext para las tablas en SQL Server

¿Puede algo similar puede hacer para las tablas?

+0

@Biswo - Ya casi me tuviera que adivinar cuál era su pregunta, que era muy difícil de leer. Por favor confirme que he interpretado correctamente. –

Respuesta

2

No parece haber un equivalente directo de sp_helptext que funcione con tablas.

Los dos métodos que parecen ser comunes en varios tableros de mensajes son:

  1. Use INFORMATION_SCHEMA.COLUMNS y concatenar los resultados en la sentencia de creación.
  2. Uso de SQL-DMO guión

Hay un artículo en el segundo método here

+0

Un par de ejemplos del primer método se puede ver en http://social.msdn.microsoft.com/Forums/en/transactsql/thread/28eeb603-1607-4b56-9461-3c0502cbec9c - es un poco de SQL peluda aunque –

+0

@Dan F lol - Supongo que también verificaste el primer resultado de 'sp_helptext table' en google :) –

+0

@David: Jaja, sí, tenía la certeza de que sería un google fácil :-) –

3

Utilice followig consulta

SELECT * FROM nombre_tabla donde INFORMATION_SCHEMA.COLUMNS = 'TableName'

6

Use Alt + F1 mientras se selecciona el nombre de la tabla en una ventana de consulta.

0

Pruebe con este SP. No tiene todas las anotaciones requeridas para una tabla como claves principales y claves externas, pero es un comienzo.

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 
Cuestiones relacionadas