一尘不染

如何使该查询接受动态表名称?

sql

这是我的功能,主要将所有行数据合并为一个字符串。我知道有一个名为Coallasce的函数可用,但是出于好奇,我想知道如何更改此函数以动态接受表名。目前,它仅从Employee表读取。

ALTER FUNCTION [dbo].[ConcatStrig]
(
    @TableName    varchar(64),
    @FieldName    varchar(64)
)
RETURNS varchar(max)
AS
BEGIN
    Declare @Sql as varchar(max) = ''
    Set @Sql = 'Select ' + @FieldName + ' from ' + @TableName

    Declare curTemp Cursor For
        Select EmpName from sp_executesql(@Sql)
    Declare @StrTemp as varchar(max)
    Declare @String as varchar(max) = ''
    Open curTemp

    Fetch Next from curTemp into @StrTemp

    While @@Fetch_Status = 0
    Begin
        Set @String = @String + ' ' + @StrTemp

        Fetch Next from curTemp into @StrTemp
    End   
    Close curTemp
    Deallocate     curTemp
    Return @String
END

提前致谢:)


阅读 125

收藏
2021-03-17

共1个答案

一尘不染

您将需要使用动态SQL

这是参数化表名的唯一方法。

2021-03-17