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

Откуда:
Сообщений: 2558
День добрый, прошу совета.
Есть код (MSSQL-2008R2):

declare @str nvarchar(200)
set @str = 'sp_depends ' +  '''' + 'Get_ForestFilter' + '''' 
declare @t table (
					name    nvarchar(200) null ,
					[type]  nvarchar(50)   null,
					updated nvarchar(10)  null,
					selected nvarchar(10) null,
					[column] nvarchar(20) null 
)
insert into @t  exec(@str)
select * from @t



Соответственно выдаётся ругачка:
Column name or number of supplied values does not match table definition.

Понятно что причина в том, resultset от системной процедуры -2ва .
Как всё таки выкрутиться и получить зависимости, с помощью стандартной процедуры, не адаптируя системную процедуру под себя. Есть ли способ? Спасибо!
16 ноя 12, 14:36    [13484212]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
trew
Member

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

-- перечислить поля
insert into @t  (name, type)
exec(@str)
select * from @t
16 ноя 12, 14:43    [13484274]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
trew
boogiman,

-- перечислить поля
insert into @t  (name, type)
exec(@str)
select * from @t


Попробовал оба запроса , не помогает, я ж говорю - данная системная процедура возвращает два разных resultset -а
с разным количеством столбцов.

insert into @t  (name, [type])
exec(@str)
select * from @t

insert into @t 
(
					name    ,
					[type]  ,
					updated ,
					selected ,
					[column]  
)					
exec(@str)
16 ноя 12, 14:48    [13484314]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
trew
Member

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

Тогда, первоначально проверь что за объект (таблица, вьюха и т.д.)
SELECT TOP 100 type, *
FROM sys.system_objects
WHERE name =...
16 ноя 12, 14:53    [13484364]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
trew
boogiman,

Тогда, первоначально проверь что за объект (таблица, вьюха и т.д.)
SELECT TOP 100 type, *
FROM sys.system_objects
WHERE name =...


А я не уточнил, I am sorry! - да это объект - функция.
В первом resultset sp_depends выдает 5ть столбцов по сущностям функции, на которых базируется функция (другие функции + таблицы)
Во втором resultset sp_depends выдает 2-ва столбца по сущностям, которые используют данную функцию!
16 ноя 12, 15:07    [13484470]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
Гость333
Member

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

Заглядываем в хелп по процедуре sp_depends и видим...

BOL
Important:
This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use sys.dm_sql_referencing_entities and sys.dm_sql_referenced_entities instead.

Так что, может, последовать совету Microsoft?
16 ноя 12, 15:15    [13484525]     Ответить | Цитировать Сообщить модератору
 Re: Динамический resultset запихнуть в таблицу  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Гость333
boogiman,

Заглядываем в хелп по процедуре sp_depends и видим...

BOL
Important:
This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use sys.dm_sql_referencing_entities and sys.dm_sql_referenced_entities instead.

Так что, может, последовать совету Microsoft?


Да спасибо, что я предупреждение то неучёл, а может быть сказалось, что часть баз на 2005 sql.
В любом случае скрипт готов, может кому и пригодится:

set nocount on;
declare @str nvarchar(200)
declare @t table (
					name		nvarchar(200) null ,
					[object_id] int ,
					descr		nvarchar(20) null 
)

	insert into @t  (name, [object_id],descr )
	select sd.name, sd.object_id , so.type_desc as descrip from 
		(
		SELECT  referencing_entity_name as name , referencing_id  as object_id
		FROM sys.dm_sql_referencing_entities ('dbo.Get_ForestFilter', 'OBJECT')
		) as sd 
			inner join  sys.objects  so
			on sd.object_id = so.object_id

	select * from @t
16 ноя 12, 15:49    [13484905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить