2016-09-23 2 views
0


Я хотел бы создать функцию, которая возвращает мне количество строк, зависит от параметра, который является именем таблицы. Является ли это возможным ? Если да, то как изменить код:
SQL Server: отправка параметра в функцию - параметр является именем таблицы

CREATE FUNCTION MyFunction (@sometable NVARCHAR(50)) 
RETURNS TABLE 
AS 
RETURN SELECT COUNT(*) N_ROWS FROM @sometable 

Спасибо за ответ.

+0

Я думаю, вам нужно будет использовать динамический SQL здесь. Дополнительную информацию см. В https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/. –

+0

Спасибо за ссылку. – Arcadio

ответ

0

Вы должны использовать dynamic query для этого, как

declare @sql nvarchar(250); 
set @sql = 'SELECT COUNT(*) AS N_ROWS FROM ' + @sometable; 
exec(@sql); 

Но опять же, вы пытаетесь создать FUNCTION, и вы не можете иметь динамический запрос в функции. Вы можете конвертировать это в stored procedure

+0

Спасибо Рахулу за подсказку. – Arcadio

0

Спасибо Рахул за подсказку.
Я сделал так:
....
НАЧАТЬ
DECLARE @ret INT
DECLARE @sql NVARCHAR (MAX)
SET @sql = 'SELECT COUNT (*) FROM N_ROWS' + @sometable
EXEC sp_executesql @ret = @sql
RETURN @ret
END;

0

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

CREATE PROC proc_name ( @sometable NVARCHAR (50) ) AS НАЧАТЬ DECLARE @name VARCHAR (200) SET @name = «SELECT COUNT (*) AS N_ROWS FROM '+ @sometable; EXEC (@Name) END

Смежные вопросы