Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   как посмотреть скрипт создания таблицы с индексами в ms sql (http://forum.oszone.net/showthread.php?t=256406)

akasha9 16-03-2013 00:23 2112111

как посмотреть скрипт создания таблицы с индексами в ms sql
 
Добрый вечер. Извините за возможно глупый вопрос.

Подскажите решение следующей задачи:

как посмотреть скрипт создания таблицы с индексами в ms sql server 2005 express edition

Delirium 16-03-2013 10:26 2112228

На таблице правой кнопкой - создать сценарий - используя Create. Делать, естественно, в SSMS.

akasha9 16-03-2013 15:23 2112405

Цитата:

Цитата Delirium
На таблице правой кнопкой - создать сценарий - используя Create. Делать, естественно, в SSMS. »

Выполнив выше приведенные манипуляции получил скрипт на создание таблицы-кучи, а не скрипт создания таблицы с индексами.

lxa85 16-03-2013 16:08 2112420

akasha9,
Цитата:

Цитата akasha9
Выполнив выше приведенные манипуляции получил скрипт на создание таблицы-кучи, а не скрипт создания таблицы с индексами. »

Поясните пожалуйста ответ.
Вы имеете ввиду CREATE INDEX (Transact-SQL) или что то другое?
Adventure Works for SQL Server 2012 (190Мб) -- учебно-тренировочная БД у меня развернется только через полчаса.
Примеры запросов с MSDN используют ее.
Предлагаю так же использовать её, чтобы всем было понятно, о чем идет речь.

akasha9 16-03-2013 17:14 2112453

Цитата:

Цитата lxa85
akasha9,
Цитата akasha9:
Выполнив выше приведенные манипуляции получил скрипт на создание таблицы-кучи, а не скрипт создания таблицы с индексами. »
Поясните пожалуйста ответ.
Вы имеете ввиду CREATE INDEX (Transact-SQL) или что то другое? »

У меня есть готовая база данных с созданными таблицами мне нужно отскриптовать эти готовые таблицы так чтобы скрипт помимо создания таблицы показывал еще и индексы которые использует данная таблица.

То есть в итоге должно быть что то вроде этого но еще и с указанием используемых индексов:

USE [DBWorks]
GO
/****** Object: Table [dbo].[Table_1] ****** /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DTM] [datetime] NOT NULL,
[NKA] [smallint] NULL,
[LKA] [smallint] NULL,
[UM] [real] NULL,
[AZ] [real] NULL,
[NMS_PT1] [smallint] NULL,
[NMS_VT1] [smallint] NULL,
[NMS_PT2] [smallint] NULL,
[NMS_VT2] [smallint] NULL,
[UP1] [real] NULL,
[UV1] [real] NULL,
[UP2] [real] NULL,
[UV2] [real] NULL,
[RP1] [float] NULL,
[RV1] [float] NULL,
[RP2] [float] NULL,
[RV2] [float] NULL,
[VP1] [float] NULL,
[VV1] [float] NULL,
[VP2] [float] NULL,
[VV2] [float] NULL,
[NBL] [smallint] NULL
) ON [PRIMARY]

lxa85 16-03-2013 18:52 2112521

Вложений: 1
akasha9, На примере вышеупомянутой БД, т.к. для нее есть скрипты создания индекса.
Загрузил 2008R2, установил. На основе примере "Е. Создание индекса представления",
выполнил запрос

Код:

USE AdventureWorks2008R2;
GO
--Set the options to support indexed views.
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
    QUOTED_IDENTIFIER, ANSI_NULLS ON;
GO
--Create view with schemabinding.
IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL
DROP VIEW Sales.vOrders ;
GO
CREATE VIEW Sales.vOrders
WITH SCHEMABINDING
AS
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o
    WHERE od.SalesOrderID = o.SalesOrderID
    GROUP BY OrderDate, ProductID;
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_V1
    ON Sales.vOrders (OrderDate, ProductID);
GO
--This query can use the indexed view even though the view is
--not specified in the FROM clause.
SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev,
    OrderDate, ProductID
FROM Sales.SalesOrderDetail AS od
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
        AND ProductID BETWEEN 700 and 800
        AND OrderDate >= CONVERT(datetime,'05/01/2002',101)
GROUP BY OrderDate, ProductID
ORDER BY Rev DESC;
GO
--This query can use the above indexed view.
SELECT  OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev
FROM Sales.SalesOrderDetail AS od
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
        AND DATEPART(mm,OrderDate)= 3
        AND DATEPART(yy,OrderDate) = 2002
GROUP BY OrderDate
ORDER BY OrderDate ASC;
GO


Обратить внимание на
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_V1
ON Sales.vOrders (OrderDate, ProductID);

Смотрим базу, находим вид Sales.vOrders, раскрываем индексы. ПКМ - создать сценарий (см. рисунок)
Получаем
следующий результат

Код:

USE [AdventureWorks2008R2]
GO

SET ARITHABORT ON
GO

SET CONCAT_NULL_YIELDS_NULL ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO

SET ANSI_PADDING ON
GO

SET ANSI_WARNINGS ON
GO

SET NUMERIC_ROUNDABORT OFF
GO

/****** Object:  Index [IDX_V1]    Script Date: 03/16/2013 18:01:13 ******/
CREATE UNIQUE CLUSTERED INDEX [IDX_V1] ON [Sales].[vOrders]
(
        [OrderDate] ASC,
        [ProductID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO


Что и требовалось получить.


Время: 07:55.

Время: 07:55.
© OSzone.net 2001-