2016-09-23 62 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

谢谢Rahul提示。
我不喜欢的是:
....
BEGIN
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 BEGIN DECLARE @Name VARCHAR(200) SET @Name =“SELECT COUNT(* )AS N_ROWS FROM'+ @sometable; EXEC(@Name) END