Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
Добрый вечер,

Имеется вот такой запрос
DROP TABLE GOODS
DROP TABLE GOODS2
CREATE TABLE GOODS2 (
   [Номер служащего]  INTEGER NOT NULL PRIMARY KEY,
   [Имя]              NCHAR(10),
   [Возраст]          INteger,
   UNIQUE([Номер служащего]));	
   INSERT INTO GOODS2 ([Номер служащего],[Имя],[Возраст]) 
    VALUES  (1, 'Валентин', 23),
            (2, 'Григорий', 24),
            (3, 'Серега', 26),
            (4, 'Женя', 27);
  
  
CREATE TABLE GOODS (
   [Номер служащего]  INTEGER NOT NULL PRIMARY KEY,
   [Пол ребенка]              NCHAR(10),
   [Имя ребенка]              NCHAR(15),
   [Возраст ребенка]          INteger,	
   
   foreign key ( [Номер служащего] ) references GOODS2 ([Номер служащего]));
   
 
INSERT INTO GOODS ([Номер служащего],[Пол ребенка],[Имя ребенка],[Возраст ребенка]) 
    VALUES  (1,'М', 'Ребенок-1', 3),
            (2,'Ж', 'Ребенок-2', 4),
            (3,'Ж', 'Ребенок-3', 6),
            (4,'М', 'Ребенок-4', 5); 
 


--execute SELECT_to_TEMP_DB

CREATE VIEW VIEW1
AS
	select GOODS2.[Номер служащего],GOODS.[Имя ребенка],GOODS.[Пол ребенка],GOODS.[Возраст ребенка], GOODS2.[Имя] --GOODS2.[Номер служащего]
  from GOODS
   inner join GOODS2 on GOODS.[Номер служащего] = GOODS2.[Номер служащего]
  
SELECT *from VIEW1

1)Я хочу результат запроса сохранить во VIEW но каждый раз выпадает сообщение "CREATE VIEW должна быть первой инструкцией в пакетном запросе."
Помогите пожалуйста его победить.

2)Также хотел спросить как сохранить результат выполнения процедуры во временную таблицу? Пробовал что-то вроде
Create table #[временная таблица]
insert [временная таблица] execute SELECT_to_TEMP_DB 
Но снова натыкался на недоразумение.

Заранее спасибо.
12 окт 11, 00:00    [11423959]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
3) И еще одно. Как видите я на самом начале удаляю таблицы Goods, Goods2, но это справедливо если они уже существуют.
Как выполнить проверку таблицы на ее существование и только тогда удалить?
Относительно БД я применял
USE [master]
GO
IF EXISTS(SELECT name FROM sys.databases
     WHERE name = 'Sales')
     DROP DATABASE Sales
 GO

Может и для таблицесть что-то похожее?
12 окт 11, 00:05    [11423980]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
_Эдуард_,

1. Т.е. вы хотите создать вьюху на таблицы, которые собираетесь регулярно дропать? Оригинально. Но только не верно. Обдумайте еще раз то, что вы собираетесь делать и зачем. Если же вы хотите просто в одном скрипте все записать - то есть маркер разделения пакетов GO. Он вам поможет.

2. Проверять существование таблицы естественно можно. Попробуйте поискать по форуму, вариантов много.
Один из них:
if not exists (select * from dbo.sysobjects where id = object_id(N'[Ваша_любимая_таблица]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
	CREATE TABLE ...
END
GO
12 окт 11, 00:15    [11424006]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
_Эдуард_,

1. Более того, она должна быть единственной в пакете. Пользуйтесь разделителем GO если выполняете из студии, либо выполняйте отдельными пакетами, либо оборачивайте в динамику.
2. На какое именно недоразумение?
3. Есть sys.tables, есть INFORMATION_SCHEME.TABLES, но обычно проще всего использовать if OBJECT_ID('Table','U') is not null
12 окт 11, 00:19    [11424016]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
kDnZP,

Я редактирую запрос в режиме реального времени, пробую что-то поправить, изменить, добавить, поэтому приходиться выполнять запрос много раз подряд. и чтобы не приходилось постоянно что-то коментировать я их пересоздаю каждый раз.
12 окт 11, 00:23    [11424026]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
iljy,

1)Пока не силен в структуре выполнения запросов, не могли бы Вы поправить это на примере запроса , который я выложил выше?
3)Проблемы в синтаксисе, не умею правильно записать(Работать с временными таблицами)
12 окт 11, 00:26    [11424033]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
_Эдуард_,

Поправка
это относительно 2-го пункта)Проблемы в синтаксисе, не умею правильно записать(Работать с временными таблицами)
12 окт 11, 00:28    [11424038]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
_Эдуард_,

......
GO
CREATE VIEW VIEW1
AS
	select GOODS2.[Номер служащего],GOODS.[Имя ребенка],GOODS.[Пол ребенка],GOODS.[Возраст ребенка], GOODS2.[Имя] --GOODS2.[Номер служащего]
  from GOODS
   inner join GOODS2 on GOODS.[Номер служащего] = GOODS2.[Номер служащего]
GO
SELECT *from VIEW1
либо
--execute SELECT_to_TEMP_DB

exec ('CREATE VIEW VIEW1
AS
	select GOODS2.[Номер служащего],GOODS.[Имя ребенка],GOODS.[Пол ребенка],GOODS.[Возраст ребенка], GOODS2.[Имя] --GOODS2.[Номер служащего]
  from GOODS
   inner join GOODS2 on GOODS.[Номер служащего] = GOODS2.[Номер служащего]')
  
SELECT *from VIEW1

2. Какие именно проблемы? Что вы хотите записать и какую ошибку выдает сервер?
12 окт 11, 00:31    [11424044]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
iljy,

Create table [временная таблица]
insert [временная таблица] execute SELECT_to_TEMP_DB 

"Неправильный синтаксис около ключевого слова "insert""
12 окт 11, 00:43    [11424071]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
_Эдуард_
iljy,

Create table [временная таблица]
insert [временная таблица] execute SELECT_to_TEMP_DB 

"Неправильный синтаксис около ключевого слова "insert""
SELECT_to_TEMP_DB - это что?
12 окт 11, 00:47    [11424080]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
Гавриленко Сергей Алексеевич,

Это хранимая процедура. В ней осуществляется выборка select....
12 окт 11, 00:54    [11424093]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
_Эдуард_, на для осознать:
BEGIN TRANSACTION
GO

CREATE PROC test AS
SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3
GO
CREATE TABLE #test(f INT)
GO

INSERT INTO #test EXEC test
SELECT * FROM #test

ROLLBACK TRANSACTION
12 окт 11, 01:00    [11424107]     Ответить | Цитировать Сообщить модератору
 Re: Создание VIEW и Временной таблицы  [new]
_Эдуард_
Member

Откуда:
Сообщений: 8
kDnZP,
Спасибо всем, кто откликнулся.
Завтра буду пробовать осуществить все рекомендации.
В случаи возникновения вопросов отпишусь.
12 окт 11, 01:36    [11424153]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить