2009-12-28 4 views
5

Когда нам нужен запрос хранимых процедур, которые мы используем «sp_helptext ИмяПроцедуры»Эквивалент sp_helptext для таблиц в SQL Server

Может что-то подобное сделать для таблиц?

+0

@Biswo - я довольно много должен был догадаться, что ваш вопрос, это было очень трудно читать. Пожалуйста, подтвердите, что я правильно интерпретировал. –

ответ

2

Не существует прямого эквивалента sp_helptext, который будет работать со столами.

Два метода, которые кажутся распространены на различных досках объявлений являются:

  1. Используйте INFORMATION_SCHEMA.COLUMNS и сцепить результаты в создании заявления.
  2. Использование SQL-DMO сценарий

Существует статья о втором методе here

+0

Несколько примеров первого метода можно увидеть на http://social.msdn.microsoft.com/Forums/en/transactsql/thread/28eeb603-1607-4b56-9461-3c0502cbec9c - это довольно привлекательный SQL, хотя –

+0

@Dan F lol - Я думаю, вы проверили первый результат для «sp_helptext table» в google также :) –

+0

@David: Ха-ха, да, у меня было подозрение, что это будет простой google :-) –

3

Пожалуйста, используйте followig запрос

выберите * из INFORMATION_SCHEMA.COLUMNS где table_name = 'TableName'

6

Используйте Alt + F1, в то время как имя таблицы выбрано в окне запроса.

0

Попробуйте с этим SP. Он не имеет всех обозначений, необходимых для таблицы, таких как первичные ключи и внешние ключи, но является началом.

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 
Смежные вопросы