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

Откуда:
Сообщений: 455
Хочется сделать такое

CROSS APPLY (select Column1 dbo.My('Column1') ) AS A
CROSS APPLY (select Column2 dbo.My('Column2') ) AS A

Внутри dbo.My
Возвращает тибличное значение. Задать поля по умолчанию для всех NULL

INSERT INTO @tbFunc('Колонка в параметре')
SELECT 1

Как динамически сформировать строку запроса и выполнить ее в функции.
Т.е. сформировали, добавили в табличное значение и все.
16 окт 09, 15:27    [7797659]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Зачем динамически-то?
У Вас количество колонок бесконечно что ли?
16 окт 09, 15:30    [7797677]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Не босконечно.
В зависимости от колонки, будет отличаться тип данных.
Для разных типов нужно.

Это можно сравнить с перегруженным методом, на вход которого передаются занчения рахных типов.

Или я ересью занимаюсь? и как то можно проще сделать
17 окт 09, 12:04    [7800047]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
iljy
Member

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

вы все равно не сможете выпонить INSERT в функцию, если у вас там выражение. И от типа это не зависит. Тогда уж если хотите динамику - используйте такой запрос
insert Table ('имя колонки')
select 1
такое легко формировать в динамике.
17 окт 09, 12:28    [7800078]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
hosTuk
Member

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

что-то ничего не понял.:).

Надо чтобы я из главного запроса, вызвал эту функцию. Функция вернет таблицу и в зависимости от входных параметоров, будет записывать значение в какой-то столбец этой функции, это будет зависеть от названия колонки.
Колонки будут иметь свои типы.
Функция например считает пропрцию какую-то
Передаю знач столбца col1
В функции определение возвращаюей таблицы есть столбец col1 и имеет тип DEC(18,2)

Передаю знач столбца col2
В функции определение возвращаюей таблицы есть столбец col2 и имеет тип DEC(18,4)

Т.е. в возвращающей таблице много столбцов, но возвращаю я какой-то один.

SELECT A.Col1 FROM dbo.My('Col1') AS A

Вот это и охота динамически сформировать

Фиг знает понятно ли объяснил...
17 окт 09, 13:12    [7800154]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
Для обычной табличной функции надо задавать типы возвращаемых данных, для инлайновой не получится разрулить кейсам. Да и нафига оно надо, не очень понятно. А если два поля возвращать надо? А пять?
17 окт 09, 13:15    [7800161]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
iljy
Member

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

не получится записывать в столбец, который вычисояется как выражение. попробуйте:
USE [tempdb]
GO
CREATE TABLE [dbo].[tt](
	[id] [int] NOT NULL,
	[val] [float] NULL
) ON [PRIMARY]
GO
CREATE FUNCTION [dbo].[getTT]
(@colN int)
RETURNS TABLE 
AS
RETURN 
(
	select case @colN when 1 then id else val end c1 from dbo.tt
)
GO
select * from dbo.GetTT(2)

insert into dbo.GetTT(2)
select 1.

но вот так:
declare @str nvarchar(max)
set @str = N'insert into TT (' + N'id' + N') values(4)'

exec(@str)

сделать можно
17 окт 09, 13:18    [7800166]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
Гавриленко Сергей Алексеевич
Member

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

Ага, а если и decimal надо, и nvarchar(2048)?
17 окт 09, 13:20    [7800170]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
iljy
Member

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

? и что? как это влияет на динамически формируемый запрос? Или вы про функцию? так я и говорю - с ней ничего нормально не получится.
17 окт 09, 13:31    [7800189]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
Гавриленко Сергей Алексеевич
Member

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

? и что? как это влияет на динамически формируемый запрос? Или вы про функцию? так я и говорю - с ней ничего нормально не получится.
Я про функцию.
17 окт 09, 14:29    [7800256]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
iljy
Member

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

? и что? как это влияет на динамически формируемый запрос? Или вы про функцию? так я и говорю - с ней ничего нормально не получится.
Я про функцию.


я собственно и привел пример чтобы показать, что она тут слабоприменима:)
Проще уж тогда процедуру сделать с параметром SQLVariant, внутри которой динамически формировать запрос на вставку. Но зачем это вообще нужно - для меня загадка.
17 окт 09, 14:50    [7800287]     Ответить | Цитировать Сообщить модератору
 Re: Функция и внутри бы вызов  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Нужно чтобы сделать штуку подобную перегрузке методов.

Вызвал под тем же именем функцию, но с другим типом и обработал по своему и вернул другой тип данных.

Вот и подумал что можно это сделать при помощи функции возвращающей таблицу.
19 окт 09, 07:19    [7803000]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить