2009-12-28 5 views
5

Wenn wir benötigen, um die Abfrage von gespeicherten Prozeduren wir ‚sp_helptext prozedur‘Equivalent von sp_helptext für Tabellen in SQL Server

Kann etwas ähnliches für Tabellen verwenden getan werden?

+0

@Biswo - ich ziemlich viel hatte zu erraten, was Ihre Frage war, war es sehr schwer zu lesen. Bitte bestätigen Sie, dass ich richtig interpretiert habe. –

Antwort

2

Es scheint keine direkte Entsprechung von sp_helptext zu geben, die mit Tabellen funktionieren wird.

Die beiden Methoden, die auf verschiedenen Message Boards üblich zu sein scheinen, sind:

  1. Verwenden INFORMATION_SCHEMA.COLUMNS und die Ergebnisse in der Anweisung create verketten. Skript
  2. Verwenden Sie SQL-DMO

Es ist ein Artikel auf dem zweiten Verfahren here

+0

Ein paar Beispiele der ersten Methode können bei http://social.msdn.microsoft.com/Forums/en/transactsql/thread/28eeb603-1607-4b56-9461-3c0502cbec9c gesehen werden - es ist einige ziemlich haarige SQL obwohl –

+0

@Dan F lol - Ich denke du hast das erste Ergebnis für 'sp_helptext table' auch in google überprüft :) –

+0

@David: Haha, ja, ich hatte eine Ahnung es wäre ein einfaches Google :-) –

3

Bitte verwenden followig Abfrage

select * from INFORMATION_SCHEMA.COLUMNS wo table_name = 'Tablename'

6

Verwenden Sie Alt + F1, während der Tabellenname in einem Abfragefenster ausgewählt wurde.

0

Versuchen Sie mit diesem SP. Es enthält nicht alle Notationen, die für eine Tabelle wie Primärschlüssel und Fremdschlüssel benötigt werden, ist aber ein Anfang.

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 
Verwandte Themen