【问题标题】:Equivalent of sp_helptext for tables in SQL ServerSQL Server 中表的 sp_helptext 等效项
【发布时间】:2009-12-28 02:41:45
【问题描述】:

当我们需要查询存储过程时,我们使用'Sp_Helptext procedurename'

可以为表格做类似的事情吗?

【问题讨论】:

  • @Biswo - 我几乎不得不猜测你的问题是什么,很难阅读。请确认我的解释正确。

标签: sql-server


【解决方案1】:

在查询窗口中选择表名时使用 Alt+F1

【讨论】:

    【解决方案2】:

    很简单:

    sp_help YourTable 
    

    【讨论】:

    • 这与用于打印用于创建存储过程的脚本的存储过程的 sp_helptext 不同。没那么简单。
    【解决方案3】:

    请使用followig查询

    select * from information_Schema.columns where table_name = 'TableName'

    【讨论】:

      【解决方案4】:

      似乎没有直接等效的 sp_helptext 可用于表格。

      在各种留言板上似乎很常见的两种方法是:

      1. 使用 Information_Schema.Columns 并将结果连接到 create 语句中。
      2. 使用 SQL-DMO 脚本

      第二种方法有文章here

      【讨论】:

      • 第一种方法的几个例子可以在social.msdn.microsoft.com/Forums/en/transactsql/thread/… 看到——虽然这是一些非常复杂的 SQL
      • @Dan F lol - 我猜你也检查了谷歌中“sp_helptext table”的第一个结果:)
      • @David:哈哈,是的,我有预感它会是一个简单的谷歌 :-)
      【解决方案5】:

      试试这个 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 T.name=@Tabla 
      
          DECLARE @i AS INT
          SELECT @i=MIN(indice) FROM @Columnas
          WHILE @i IS NOT NULL
          BEGIN
              SELECT @Script+=Columna+CHAR(13) FROM @Columnas WHERE indice=@i
              SELECT @i=MIN(indice) FROM @Columnas WHERE indice>@i
          END
      
          SET @Script=SUBSTRING(@Script,0,LEN(@Script)-1) + CHAR(13) + ')'
          PRINT @Script
      END 
      GO
      

      【讨论】:

        猜你喜欢
        • 2011-04-30
        • 2023-03-07
        • 2020-07-22
        • 2015-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 2011-03-13
        相关资源
        最近更新 更多