如何将 tableName 和 columnName 发送到 sql 函数和 return 结果

How to send tableName and columnName to sql function and return result

我想创建一个 T-SQL 函数,将 table 名称和列名称发送给它,并获取该列的最大值。

我写了这样一个函数:

CREATE FUNCTION getMaxValue 
     (@TableName nvarchar(30),@FieldName nvarchar(30))
RETURNS nvarchar(max) 
AS  
BEGIN 
    DECLARE @SqlString nvarchar(MAX)
    --declare @Result nvarchar(MAX)

    SET @SqlString = ' select max( ' + @FieldName + ') from ' + @TableName 
    RETURN EXEC(@SqlString)
END

但我无法在该函数内的 SETSELECTRETURN 中使用 EXEC

请帮我解决这个问题。

您必须使用 sp_executesql 来 运行 查询

这是一个非常奇怪的请求,并且不适用于我遇到过的几乎所有数据库。它在我曾经使用过的任何系统中也没有意义,但您可以利用动态 sql 来实现这样的事情。我希望你有耐心,因为这会慢得令人难以置信。但是你要求 sql 得到每个 table 的每一列的最大值。没有办法快速做到这一点。

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'select ''' + TABLE_NAME + ''' as TableName, ''' + COLUMN_NAME + ''' as ColumnName, cast(Max([' + COLUMN_NAME + ']) as varchar(max)) as MaxValue from [' + TABLE_NAME + '] union all '
from INFORMATION_SCHEMA.COLUMNS

set @SQL = LEFT(@SQL, len(@SQL) - 10)

select @SQL
--uncomment below when you are comfortable with this.
--exec sp_executesql @SQL