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

Откуда: Москва
Сообщений: 1145
Есть три таблицы с одинаковой структурой.

Нужно из одной из трех добалять записи в другу из трех.
Подскажите, как в ХП изменять название таблицы в запросе на добавление?
Первое, что приходит на ум, это передавать название таблицы в виде строки и и подставлять в строку с названием в запрос.
Может есть другие способы. Подскажите пожалуйста.
13 июл 09, 10:57    [7407213]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=104
13 июл 09, 11:06    [7407255]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1145
tpg,

Спасибо, я так понял динамические запросы это не есть гуд.
14 июл 09, 11:12    [7412250]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
Ох...ий программизд
Guest
MasterZ,

if
если SQl Server 2008, то Table-Valued Parameters
14 июл 09, 11:27    [7412323]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1145
Ох...ий программизд
MasterZ,

if
если SQl Server 2008, то Table-Valued Parameters


Я так понял все инсерты делать через таблицу определенную как Table-Valued Parameters
Но ведь и таблицы куда делается инсерт тоже величина переменная.
Опять выходит динамический запрос. Или я не прав?
14 июл 09, 11:52    [7412462]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
Ох...ий программизд
Guest
MasterZ,

если вас так пугает красный код, то напишите через if
14 июл 09, 12:02    [7412552]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Ох...ий программизд
если SQl Server 2008, то Table-Valued Parameters
Не годится.
Перед вызовом копировать таблицы в табличные переменные?
А внутри эти табличные переменные "read only" - что делать предлагаете?
14 июл 09, 12:08    [7412593]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
Ох...ий программизд
Guest
iap,

я уже понял, что не годится, после этих слов
MasterZ
Но ведь и таблицы куда делается инсерт тоже величина переменная.
14 июл 09, 12:10    [7412606]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
MasterZ
tpg,

Спасибо, я так понял динамические запросы это не есть гуд.
CREATE PROCEDURE InsertFromT1IntoT2 AS INSERT T2 SELECT * FROM T1;
GO
CREATE PROCEDURE InsertFromT1IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT1 AS INSERT T1 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT3IntoT1 AS INSERT T1 SELECT * FROM T3;
GO
CREATE PROCEDURE InsertFromT3IntoT2 AS INSERT T2 SELECT * FROM T3;
GO
CREATE PROCEDURE InsertFromTxIntoTy(@Proc sysname) AS EXECUTE @Proc;
GO
/*Пример вызова*/
EXECUTE InsertFromTxIntoTy N'InsertFromT2IntoT3';
Никаких динамических запросов!
14 июл 09, 12:15    [7412647]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
MasterZ
tpg,

Спасибо, я так понял динамические запросы это не есть гуд.
CREATE PROCEDURE InsertFromT1IntoT2 AS INSERT T2 SELECT * FROM T1;
GO
CREATE PROCEDURE InsertFromT1IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT1 AS INSERT T1 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT3IntoT1 AS INSERT T1 SELECT * FROM T3;
GO
CREATE PROCEDURE InsertFromT3IntoT2 AS INSERT T2 SELECT * FROM T3;
GO
CREATE PROCEDURE InsertFromTxIntoTy(@Proc sysname) AS EXECUTE @Proc;
GO
/*Пример вызова*/
EXECUTE InsertFromTxIntoTy N'InsertFromT2IntoT3';
Никаких динамических запросов!
Кстати говоря, последняя процедура вообще-то лишняя:
CREATE PROCEDURE InsertFromT1IntoT2 AS INSERT T2 SELECT * FROM T1;
GO
CREATE PROCEDURE InsertFromT1IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT1 AS INSERT T1 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT2IntoT3 AS INSERT T3 SELECT * FROM T2;
GO
CREATE PROCEDURE InsertFromT3IntoT1 AS INSERT T1 SELECT * FROM T3;
GO
CREATE PROCEDURE InsertFromT3IntoT2 AS INSERT T2 SELECT * FROM T3;
GO
/*Пример вызова*/
DECLARE @Proc sysname;
SET @Proc=N'InsertFromT2IntoT3';
EXECUTE @Proc;
14 июл 09, 12:33    [7412735]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1145
iap,

Этот вариант был самым первым, только количество комбинаций для трех таблиц буде 3Х3=9
Нужно написать 9 хранимок. для отбора и для вставки еще используются целочисленные параметры, и названия ключевых полей в таблицах отличаются, хранимки будут немного сложнее, поэтому ищу другие варианты.
14 июл 09, 16:19    [7414433]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
MasterZ
iap,

Этот вариант был самым первым, только количество комбинаций для трех таблиц буде 3Х3=9
Нужно написать 9 хранимок. для отбора и для вставки еще используются целочисленные параметры, и названия ключевых полей в таблицах отличаются, хранимки будут немного сложнее, поэтому ищу другие варианты.
Читаем внимательно первое сообщение темы:
MasterZ
Есть три таблицы с одинаковой структурой
А теперь "названия ключевых полей отличаются"?
Причём, если подумать, это вообще неважно!
MasterZ
Нужно из одной из трех добалять записи в другу из трех.
Из трёх таблиц в качестве источника можно выбрать одну тремя способами. Так?
В каждом из этих случаев целевую таблицу можно выбрать из двух оставшихся двумя способами. Так?
Помню, когда-то меня в школе учили, что 3x2=6 Я ошибаюсь?
14 июл 09, 16:45    [7414677]     Ответить | Цитировать Сообщить модератору
 Re: Название таблицы как параметр  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1145
iap
MasterZ
iap,

Этот вариант был самым первым, только количество комбинаций для трех таблиц буде 3Х3=9
Нужно написать 9 хранимок. для отбора и для вставки еще используются целочисленные параметры, и названия ключевых полей в таблицах отличаются, хранимки будут немного сложнее, поэтому ищу другие варианты.
Читаем внимательно первое сообщение темы:
MasterZ
Есть три таблицы с одинаковой структурой
А теперь "названия ключевых полей отличаются"?
Причём, если подумать, это вообще неважно!
MasterZ
Нужно из одной из трех добалять записи в другу из трех.
Из трёх таблиц в качестве источника можно выбрать одну тремя способами. Так?
В каждом из этих случаев целевую таблицу можно выбрать из двух оставшихся двумя способами. Так?
Помню, когда-то меня в школе учили, что 3x2=6 Я ошибаюсь?



Да, не написал, из таблицы нужно добавлять в нее же. По любому 9 получается.
14 июл 09, 16:54    [7414793]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить