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

Откуда: Пермь
Сообщений: 18326
Как из текста произвольного запроса получит список полей и их типы прямно на sql сервере, не на клиенте.
25 авг 04, 08:47    [905640]     Ответить | Цитировать Сообщить модератору
 Re: Как из текста произвольного запроса получит список полей и их типы?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
1 парсить весь запрос.
2 можно сделать так
select * into #t from myview where 1 = 0
и дальше смотреть syscolumns базы tempdb



для спящего время бодрствования равносильно сну
25 авг 04, 08:49    [905645]     Ответить | Цитировать Сообщить модератору
 Re: Как из текста произвольного запроса получит список полей и их типы?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Спасибо, я использую вариант 2, просто думал есть вариант проще.
А написть свой парсер довольно сложно.
25 авг 04, 09:28    [905712]     Ответить | Цитировать Сообщить модератору
 Re: Как из текста произвольного запроса получит список полей и их типы?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
create procedure upCursorColumns(@Statement nvarchar(4000)) 
as
exec('DECLARE abc CURSOR GLOBAL KEYSET FOR '+@Statement+' open abc')
SELECT ordinal_position, column_name, 
       dataType = cast(case when data_type_sql in (175,
239, 231, 167, 165, 173) then st.[name]+'('+cast(column_size as varchar)+')'
when data_type_sql in (106, 108) then st.name+'('+cast(column_precision as
varchar)+','+cast(column_scale as varchar)+')'else st.name end as varchar(100))
FROM master.dbo.syscursorrefs scr,
     master.dbo.syscursorcolumns scc,
     master.dbo.systypes st 
WHERE 	scr.cursor_scope = 2
    and scr.reference_name = 'abc' 
    and scr.cursor_handl = scc.cursor_handle
    and st.xusertype=data_type_sql
ORDER BY ordinal_position
CLOSE abc
DEALLOCATE abc
GO

declare @sql nvarchar(200)
set @sql = N'select *,1 as MyInt,''test'' as MysTring from sysobjects'
exec upCursorColumns @sql
drop procedure upCursorColumns

25 авг 04, 10:54    [905988]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить