табличная функция

vah
Дата: 08.02.2013 10:35:41
Скажите пожалуйста,



CREATE FUNCTION sel_user_only_base
(

)
RETURNS 
@t TABLE 
(
	[User_ID] [int] NOT NULL,
	[UserName] [nvarchar](50) NOT NULL,
	[Sector_ID] [int] NOT NULL,
	[FullName] [nvarchar](250) NOT NULL,
	[email] [varchar](250) NULL	
)
AS
BEGIN
	declare @tbl TABLE(UserName varchar(100),GroupName varchar(50),LoginName varchar(100),DefDBName varchar(50),DefSchemaName varchar(50),UserID varchar(50),S varbinary(max))

	insert into @tbl(UserName,GroupName,LoginName,DefDBName,DefSchemaName,UserID,S)
	exec sp_helpuser 

	insert into @t(User_ID, UserName, Sector_ID, FullName, email)
	select User_ID, UserName, Sector_ID, FullName, email
	from dbo.sel_users where UserName in (select UserName from @tbl)

	RETURN 
END


возвращает

Сообщение 443, уровень 16, состояние 14, процедура sel_user_only_base, строка 19
Недопустимое использование оператора с побочным действием или зависимого от времени в "INSERT EXEC" в функции.


Как обойти?



Заранее благодарен.
alexeyvg
Дата: 08.02.2013 10:41:52
vah
Как обойти?
Никак, в функциях использование insert...exec запрещено.
Нужно отказаться либо от функции, либо от insert...exec
vah
Дата: 08.02.2013 10:45:02
alexeyvg
vah
Как обойти?
Никак, в функциях использование insert...exec запрещено.
Нужно отказаться либо от функции, либо от insert...exec


это они зря, жалко штоль?
Гость333
Дата: 08.02.2013 11:00:36
vah
Как обойти?

Всё, что связано с @tbl — убрать.

select UserName from @tbl
— заменить на:
select u.name from sys.database_principals u where u.type <> 'R'

Функцию из multistatement переделать в inline.
vah
Дата: 08.02.2013 11:09:31
Гость333,
Спасибо!