2012-05-04 39 views
1

我已經在SQL Server的Scalar-Valued函數下面編寫了獲取指定表中指定列的數據的函數。我將表名和列名傳遞給函數。但根據這個systax,我不能給這個函數提供@table參數,它要求我聲明它。這可能是由於我在此使用的語法錯誤。任何人都可以幫我弄明白嗎?將參數傳遞給SQL Server的語法錯誤標量值函數

USE [mydatabse] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


ALTER FUNCTION [dbo].[FnTDEVgroupConcat2] 
    (@fieldName varchar(max), 
    @table varchar(max) 
    ) 

RETURNS varchar(max) 
AS 
BEGIN 
    -- Declare the return variable here 
    DECLARE @result varchar(max) 

    set @result = (SELECT @fieldName + ',' FROM @table FOR XML PATH('')); 

    -- Return the result of the function 
    RETURN @result; 

END 

回答

0

SQL中沒有類型的表類型。 創建用戶定義表類型,其結構與您要在函數中使用的結構相同。探討如何創建像INT,VARCHAR和其他創建表類型的用戶定義類型,然後在函數中使用相同的類型。

2

您不能用變量/參數指定表名。您必須使用@table並構建您的查詢dynamically

您不能在函數中執行動態SQL,因此您需要帶有輸出參數的stored procedure