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