powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заполнить временную таблицу данными из динамического запроса.
25 сообщений из 26, страница 1 из 2
Как заполнить временную таблицу данными из динамического запроса.
    #39686886
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Имеется таблица, в которой хранятся имена функций, которые возвращают табличные значения. У всех функций одинаковые поля.


Читая имя функции из таблицы, как можно её вызвать и заполнить данными временную таблицу.

Смысл попробую передать через скрипт (конечно, он не рабочий)) ):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @FunName NVARCHAR(50) = '[dbo].[main_fun]()'
DECLARE @MyTable TABLE (
  [Key] INT,
  [Name] NVARCHAR(50)
)

INSERT INTO MyTable  ([Key], [Name])
  SELECT [Key], [Name] FROM @FunName



Заранее благодарен!
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686889
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

INSERT INTO ... EXEC()
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686893
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

не понял, это как?

Код: sql
1.
2.
INSERT INTO @MyTable ([Key], [Name])
  SELECT [Key], [Name] FROM EXEC('SELECT [Key], [Name] FROM [dbo].[main_fun]()')



так должно получиться?
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686898
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

нет
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686900
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSTaPaK,

не понял, это как?Набираете EXEC, подводите на него курсор, нажимаете F1
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686901
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Помоги разобраться... бегло пробежался по возможностям EXEC в справке, не нашёл нужного...
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686904
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSTaPaK,

Помоги разобраться... бегло пробежался по возможностям EXEC в справке, не нашёл нужного...\
теперь бегите по INSERT
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686906
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKИгорь_UUSTaPaK,

Помоги разобраться... бегло пробежался по возможностям EXEC в справке, не нашёл нужного...\
теперь бегите по INSERT

Разобрался спс!
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686909
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXEC('INSERT INTO @MyTable ([Key], [Name]) SELECT [Key], [Name] FROM dbo.main_fun()')

ps: Это не временная таблица. Это табличная переменная.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686910
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoEXEC('INSERT INTO @MyTable ([Key], [Name]) SELECT [Key], [Name] FROM dbo.main_fun()')

ps: Это не временная таблица. Это табличная переменная.
и что потом с этим творчеством делать? просто для красоты?
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686916
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

если не хотите писать IF..ELSE, напишите CLR табличную функцию, передавайте имя SQL функции. Этим должно заниматься прикладное приложение на самом деле, а не сервер БД.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686934
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, а можно обойти в функции, возвращающей табличное значение:

Недопустимое использование оператора "INSERT EXEC", оказывающего побочное действие, в функции.

?

пытаюсь сделать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE FUNCTION [dbo].[DB_DUP_GetDuplicatesInSearchPlan](
  @SearchPlanKey	INT
) RETURNS @Duplicates TABLE (
    [Key]			INT PRIMARY KEY,
    [Name]			NVARCHAR(255) NOT NULL,
    [Information]	NVARCHAR(512) NOT NULL,
    [Enabled]		BIT NOT NULL,
    [CreationDate]	DATETIME NOT NULL,
    [RowNumber]		INT NOT NULL
  )
AS
BEGIN
  DECLARE @FunctionName NVARCHAR(50) = (SELECT [FunctionName] FROM [DB_DUP_SearchPlan] WHERE [Key] = @SearchPlanKey)
  INSERT INTO @Duplicates ([Key], [Name], [Information], [Enabled], [CreationDate], [RowNumber])
    EXEC('SELECT [Key], [Name], [Information], [Enabled], [CreationDate], [RowNumber] FROM ' + @FunctionName)
  
  RETURN
END
GO
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686935
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSа можно обойти в функции
Выбрать какую-нибудь другую СУБД.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686938
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей АлексеевичИгорь_UUSа можно обойти в функции
Выбрать какую-нибудь другую СУБД.


Спасибо, не вариант!))
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39686944
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSГавриленко Сергей Алексеевичпропущено...
Выбрать какую-нибудь другую СУБД.
Спасибо, не вариант!))Ваша архитектура -- тоже не вариант для MSSQL.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687394
Const123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей АлексеевичВаша архитектура -- тоже не вариант для MSSQL.
Ваши ответы напоминают фразу : "Просто ты неудачник - убей себя об стену".

ТС , действительно смотрите в сторону CLR, в ней можно спокойно "спрятать" любые динамические запросы.
Но туда возможно потребуется пробросить много лишней требухи, вроде имени пользователя и пароля и т.п. при формировании итогового запроса.
Стоит взвесить все за и против.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687409
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Const123Гавриленко Сергей АлексеевичВаша архитектура -- тоже не вариант для MSSQL.
Ваши ответы напоминают фразу : "Просто ты неудачник - убей себя об стену".

ТС , действительно смотрите в сторону CLR, в ней можно спокойно "спрятать" любые динамические запросы.
Но туда возможно потребуется пробросить много лишней требухи, вроде имени пользователя и пароля и т.п. при формировании итогового запроса.
Стоит взвесить все за и против.Но это действительно не вариант для SQL. Это противоречит принятому в MSSQL подходу.

ТС нужно смотреть не в сторону CLR, а в сторону статической типизации используемых множеств.

И вообще, нужно постараться хоть немного поработать в команде с опытным разработчиком, так можно будет научиться азам не за год, сделав один нежизнеспособный проект в мусорную корзину, а месяца за 3.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687415
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

авторИ вообще, нужно постараться хоть немного поработать в команде с опытным разработчиком, так можно будет научиться азам не за год, сделав один нежизнеспособный проект в мусорную корзину, а месяца за 3.
судя по темам в среде sql, 2/3 "новых" разработсчиков начинают с фразы "нафиг мне писать обработку каждой сущности, сделаю ка я процедурку с динамикой и сразу утру нос всем этим поганым сеньорам"
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687419
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я знал человека, который 90% кода писал динамическими запросами. И этим не горжусь. :D
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687518
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь ответ-то прост - объявление табличной переменной и дальнейшая работа с ней должна быть в той же переменной, в которую помещаете INSERT. Поместите в нее весь необходимый код и выполняйте его, если уж так хочется.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687520
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFА ведь ответ-то прост - объявление табличной переменной и дальнейшая работа с ней должна быть в той же переменной, в которую помещаете INSERT. Поместите в нее весь необходимый код и выполняйте его, если уж так хочется.
в какой переменной должна быть переменная?
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687620
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKв какой переменной должна быть переменная?

Что тут непонятного:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE @FunName NVARCHAR(50) = '[dbo].[main_fun]()'
DECLARE @Sql varchar(4000)

SET @Sql =
'DECLARE @MyTable TABLE (
  [Key] INT,
  [Name] NVARCHAR(50)
)

INSERT INTO @MyTable  ([Key], [Name])
  SELECT [Key], [Name] FROM dbo.' + @FunName + '

SELECT * FROM @MyTable'

EXEC (@Sql)
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687626
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrF,

1. и зачем? И всё потом в динамие писать?

2.
а так нельзя?

Код: sql
1.
2.
INSERT INTO @MyTable ([Key], [Name])
  EXEC('SELECT [Key], [Name] FROM [dbo].[main_fun]()')



3.
непонятно ваши бредовые ассоциации или скорее не понимаение работы
автор объявление табличной переменной и дальнейшая работа с ней должна быть в той же переменной,
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687632
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKAndrF,

1. и зачем? И всё потом в динамие писать?

Напишите иначе.

TaPaK2.
а так нельзя?

Код: sql
1.
2.
INSERT INTO @MyTable ([Key], [Name])
  EXEC('SELECT [Key], [Name] FROM [dbo].[main_fun]()')



3.
непонятно ваши бредовые ассоциации или скорее не понимаение работы

Блин, да вы хоть прочтите то с чего все началось - внимательно и по слогам, перед тем как строчить.

Имена функций у автора вопроса хранятся в таблице (не спрашивайте меня почему - считаем что так надо). Их надо подставлять в запрос.

Теперь, вместо того чтобы не вдумываясь писать о бреде - покажите свое решение того что он хочет получить в итоге.
...
Рейтинг: 0 / 0
Как заполнить временную таблицу данными из динамического запроса.
    #39687633
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrF,

ну раз вы не сразу понимаете, то вот

Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @FunName NVARCHAR(50) = '[dbo].[main_fun]()'
DECLARE @Sql varchar(4000)
SET @Sql = 'SELECT [Key], [Name] FROM dbo.' + @FunName 

INSERT INTO @MyTable ([Key], [Name])
  EXEC(@sql)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заполнить временную таблицу данными из динамического запроса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]