Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопросы по табличным переменным  [new]
igor888
Guest
Добрый вечер.

Пару вопросов.
1. Как отредактировать структуру табличной переменной?
2. Как определить существует ли табличная переменная или нет?
3. Как определить, в каких хранимых процедурах используется табличная переменная?
7 ноя 14, 16:44    [16813161]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
а что вы понимаете под табличной переменной? а то что-то ваши вопросы не понятны в этом контексте, особенно п.3, например.
7 ноя 14, 16:46    [16813171]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Glory
Member

Откуда:
Сообщений: 104751
igor888
1. Как отредактировать структуру табличной переменной?

Открыть скрипт, где объявляется эта переменная и отредактировать его

igor888
2. Как определить существует ли табличная переменная или нет?

Это же локальная переменная вашего скрипта
При отсутствии переменной он даже не скомпилируется.

igor888
3. Как определить, в каких хранимых процедурах используется табличная переменная?

Искать в тексте процедуры declare ... table
7 ноя 14, 16:48    [16813185]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Glory
igor888
1. Как отредактировать структуру табличной переменной?

Открыть скрипт, где объявляется эта переменная и отредактировать его

igor888
2. Как определить существует ли табличная переменная или нет?

Это же локальная переменная вашего скрипта
При отсутствии переменной он даже не скомпилируется.

igor888
3. Как определить, в каких хранимых процедурах используется табличная переменная?

Искать в тексте процедуры declare ... table


Спасибо за ответы.

Что касается первого вопроса, не совсем понял ответ... попробую объяснить... Создаю табличную переменную, использую её во многих уголках базы, в 10-ти а может в 100 процедурах, затем наступило время её модифицировать, например добавить новое полу или удалить старое. И как это сделать?! В описании от мелкасофта не нашёл ничего подобного, надо удалить объявленный тип и затем его создать в новом формате (других решений не нашёл). И удаляет он его, только после того как будут удалены все хранимые процедуры где он используется((( отсюда и вопросы 2 и 3
7 ноя 14, 16:58    [16813247]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вы бы привели что-ли код на SQL, а то не ясно что вы делаете:

igor888
Создаю табличную переменную, использую её во многих уголках базы
7 ноя 14, 16:59    [16813255]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Glory
Member

Откуда:
Сообщений: 104751
igor888
Создаю табличную переменную, использую её во многих уголках базы, в 10-ти а может в 100 процедурах, затем наступило время её модифицировать, например добавить новое полу или удалить старое. И как это сделать?!


Словами у вас плохо получается
Привидите код

igor888
В описании от мелкасофта не нашёл ничего подобного, надо удалить объявленный тип и затем его создать в новом формате (других решений не нашёл). И удаляет он его, только после того как будут удалены все хранимые процедуры где он используется((( отсюда и вопросы 2 и 3

Если вы про User-Defined Table Types, то надо было читать хелп прежде, чем подписываться на их использование
7 ноя 14, 17:03    [16813281]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Glory,

накидал скрипты:
-- создание табличной переменной

CREATE TYPE [ClientTable] AS TABLE 
    ( 
      [Parent]			INT				NOT NULL,   
      [Fam]				NVARCHAR(20)	NOT NULL,
      [Nam]				NVARCHAR(15)	NOT NULL,
      [Otch]			NVARCHAR(15)	NOT NULL,
      [Phone]			NVARCHAR(30)			,
      [Enabled]			BIT				NOT NULL
    );
GO

-- Использую в хранимке
CREATE PROCEDURE [CreateClient]
  @ClientTable	ClientTable READONLY,
  @Result		INT = 0 OUTPUT
AS
SET NOCOUNT ON;

-- Выполнение операции создания
BEGIN TRANSACTION

INSERT INTO [CL_List] 
  ([Parent], [Fam], [Nam], [Otch], [Phone], [Enabled]) 
SELECT 
  [Parent], [Fam], [Nam], [Otch], [Phone], [Enabled]
FROM
  @ClientTable

IF @@ERROR <> 0
BEGIN
  ROLLBACK TRANSACTION
  RETURN 1
END

COMMIT TRANSACTION

SET @Result = @@IDENTITY

RETURN 0
GO


Если нужно добавить новое поле в табличную переменную (или удалить), та как?
7 ноя 14, 17:11    [16813326]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Ограничения
Возвращающие табличные значения параметры имеют следующие ограничения.
SQL Server не ведет статистику столбцов возвращающих табличные значения параметров.
Возвращающие табличные значения параметры должны передаваться процедурам Transact-SQL как входные параметры типа READONLY. Над возвращающими табличные значения параметрами, находящимися в теле процедуры, нельзя выполнять операции DML, такие как UPDATE, DELETE или INSERT.
Возвращающий табличное значение параметр не может быть использован в качестве цели для инструкции SELECT INTO или INSERT EXEC. Возвращающий табличное значение параметр может присутствовать в предложении FROM инструкции SELECT INTO, в строке или хранимой процедуре INSERT EXEC.
7 ноя 14, 17:15    [16813345]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
http://msdn.microsoft.com/ru-ru/library/bb510489.aspx
7 ноя 14, 17:16    [16813349]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Glory
Member

Откуда:
Сообщений: 104751
igor888
Если нужно добавить новое поле в табличную переменную (или удалить), та как?

Удаляете процедуру
Удаляете тип
Создаете тип
Создаете процедуру
7 ноя 14, 17:16    [16813350]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Konst_One
Ограничения
Возвращающие табличные значения параметры имеют следующие ограничения.
SQL Server не ведет статистику столбцов возвращающих табличные значения параметров.
Возвращающие табличные значения параметры должны передаваться процедурам Transact-SQL как входные параметры типа READONLY. Над возвращающими табличные значения параметрами, находящимися в теле процедуры, нельзя выполнять операции DML, такие как UPDATE, DELETE или INSERT.
Возвращающий табличное значение параметр не может быть использован в качестве цели для инструкции SELECT INTO или INSERT EXEC. Возвращающий табличное значение параметр может присутствовать в предложении FROM инструкции SELECT INTO, в строке или хранимой процедуре INSERT EXEC.


нда, не удевил
я виду речь не о том, можно ли изменить объявленную табличную переменную, а изменить тип табличной переменной!
7 ноя 14, 17:19    [16813365]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Glory
igor888
Если нужно добавить новое поле в табличную переменную (или удалить), та как?

Удаляете процедуру
Удаляете тип
Создаете тип
Создаете процедуру


Это я и так знал, собственно это и писал выше!
Жаль что нет другого варианта.

Ладно остаётся тогда вопрос, как узнать в каких хранимых процедурах используется табличная переменная? Можно ли вытащить информацию запросом типа SELECT ... FROM ... WHETE... ?
7 ноя 14, 17:22    [16813383]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вам уже Glory выше ответил как это делать.

почитайте тут: http://msdn.microsoft.com/ru-ru/library/ms174407(v=sql.105).aspx
7 ноя 14, 17:24    [16813388]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
igor888
Glory
пропущено...

Удаляете процедуру
Удаляете тип
Создаете тип
Создаете процедуру


Это я и так знал, собственно это и писал выше!
Жаль что нет другого варианта.

Ладно остаётся тогда вопрос, как узнать в каких хранимых процедурах используется табличная переменная? Можно ли вытащить информацию запросом типа SELECT ... FROM ... WHETE... ?


http://msdn.microsoft.com/ru-ru/library/ms187995.aspx
7 ноя 14, 17:24    [16813392]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Glory
Member

Откуда:
Сообщений: 104751
igor888
Это я и так знал, собственно это и писал выше!
Жаль что нет другого варианта.

Вы думаете, что в официалном хелпе специально скрывают более простые способы ?
7 ноя 14, 17:25    [16813394]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Konst_One,

спасибо!



Ещё маленький вопрос, если пробежаться циклом по таблице (имеется ввиду табличной переменной), что лучше использовать в плане производительности, курсоры...?
7 ноя 14, 17:34    [16813435]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
o-o
Guest
igor888
остаётся тогда вопрос, как узнать в каких хранимых процедурах используется табличная переменная?

вы до сих пор не уловили разницы между типом и переменной что-ли?
весь топик про ТИП.
поэтому и вьюха соответствующая в названии имеет "type".
и в процедурах надо искать тип.
7 ноя 14, 17:41    [16813463]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
igor888
Konst_One,

спасибо!



Ещё маленький вопрос, если пробежаться циклом по таблице (имеется ввиду табличной переменной), что лучше использовать в плане производительности, курсоры...?


16813326

вот в вашем скрипте я что-то не вижу зачем тут курсор. задайте конкретный вопрос с примером кода. что у вас не получается?
7 ноя 14, 17:47    [16813489]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Konst_One,

Нет, вопрос не в этом запросе... это я так на скорую руку накидал, чтоб понятно было...


Задался вопросом циклов (это мне на будущее)... сейчас обработку датасета (если это необходимо) делаю через курсоры (других вариантов не знаю), курсоры не шибко то производительны (это факт). Собственно и вопрос... кроме курсоров может ещё что есть?
7 ноя 14, 17:53    [16813517]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вы в контексте некого языка программирования спрашиваете?
если .NET , то можете LINQ посмотреть
7 ноя 14, 17:54    [16813525]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
http://msdn.microsoft.com/ru-ru/data/cc298428
7 ноя 14, 17:59    [16813548]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Konst_One,

Нет... я про TSQL, есть какие ещё варианты кроме курсоров?
7 ноя 14, 17:59    [16813552]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
select
7 ноя 14, 18:00    [16813557]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
igor888
Guest
Konst_One,

))))

как будто в разных измерениях))))
на дельфях делается так:
var db: TADOQuery
...
...
while not db.eof do
begin
  // что-то делаю
  ...
  ...
  db.Next;
end;


В TSQL кроме курсоров есть что нибудь ещё (на подобии обработки приведённой выше)????
7 ноя 14, 18:09    [16813599]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы по табличным переменным  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
http://msdn.microsoft.com/ru-ru/library/ms178642.aspx

только не понимаю зачем вам это нужно, вы бы лучше сразу задачу озвучивали с примером вашего кода SQL
7 ноя 14, 18:10    [16813612]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить