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

Откуда:
Сообщений: 5
Существует ли возможность объявит в процедуре переменную зараннее неопределенного типа, т.е. когда тип зависит от входных параметров?
14 апр 05, 18:03    [1469668]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
sql_variant, varchar
?
14 апр 05, 18:04    [1469674]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
vik11
Member

Откуда:
Сообщений: 5
задача следующая
получить как параметр имя таблицы, имя колонки, значение
первые два параметра nvarchar, а значение в sql_variant

далее у меня не нолучается передать значение в sp_executesql
ошибка в том что необходимо явное преобразование к фактическому типу
полученной колонки
14 апр 05, 19:03    [1469834]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Приведите свой нерабочий код, разберемся.
15 апр 05, 10:24    [1470645]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
Glory
Member

Откуда:
Сообщений: 104760
ошибка в том что необходимо явное преобразование к фактическому типу

???
declare @x1 sql_variant,@x2 sql_variant

set @x1  = 10
set @x2 = getdate()

select sql_variant_property(@x1, 'BaseType'), sql_variant_property(@x2, 'BaseType')
15 апр 05, 10:27    [1470656]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
vik11
Member

Откуда:
Сообщений: 5
используется для эксперимента pubs

declare @table_name nvarchar(50),
@col_name nvarchar(50),
@col_value sql_variant

set @table_name='authors'
set @col_name='city'
set @col_value='Lawrence'

--1) Poluchiti tip kolonki
declare @col_type nvarchar(14)
set @col_type=( select case systypes.name
when 'varchar' then systypes.name +'('+ cast(syscolumns.length as char(4))+')'
end
from syscolumns inner join systypes
on syscolumns.xusertype=systypes.xusertype
where syscolumns.name=@col_name and id in
(
select id
from sysobjects
where sysobjects.name =@table_name
)
)



--2) formirovanie dinamiceskogo zaprosa

declare @sql nvarchar(1000)
declare @def nvarchar(50)

set @def=N'@value '+@col_type
set @sql=N'select '+ @col_name+' from '+ @table_name+ ' where '+@col_name+'=@value'

select @def
--3) vipolnenie dinamiceskogo zaprosa
/*
execute sp_executesql @sql,
@def,
@value=@col_value
*/


Как преобразовать @col_value к нужному типу и передать как значение для @value?
15 апр 05, 10:56    [1470752]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Первая часть как у вас, потом вот так:
--2) formirovanie dinamiceskogo zaprosa

declare @sql nvarchar(1000)

set @sql=N'select '+ @col_name+' from '+ @table_name+ ' where '+@col_name+'=@value'

--3) vipolnenie dinamiceskogo zaprosa
execute sp_executesql @sql,
N'@value sql_variant',
@value=@col_value
15 апр 05, 11:11    [1470815]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
vik11
Member

Откуда:
Сообщений: 5
Спасибо большое!
Замечу, что после вашего совета необходимость первой части отпадает:)
15 апр 05, 11:51    [1470986]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Это замечательно, но не забывайте, что не все типы могут быть приведены к sql_variant. Ну и вообще динамика... Зачем вам динамика? Что-то ужасно универсальное ваяете?
15 апр 05, 12:02    [1471031]     Ответить | Цитировать Сообщить модератору
 Re: Переменная неопределенного типа  [new]
vik11
Member

Откуда:
Сообщений: 5
Вряд ли это будет реализовано именно в таком виде.
Задание было так сформулировано, что бы приблизится немного к пониманию
динамических запросов, которые в дальнейшем точно придется использовать.
Спасибо за помощь.
15 апр 05, 13:43    [1471579]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить