如何将tableName和columnName发送到sql函数并返回结果

时间:2016-01-25 20:22:06

标签: sql sql-server tsql sql-function

我想创建一个T-SQL函数,向其发送表名和列名,并获取该列的最大值。

我写了一个这样的函数:

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

但我无法在此功能中的EXECSETSELECT中使用RETURN

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:5)

这是一个非常奇怪的请求,几乎不会在我遇到的每个数据库中都有效。在我曾经使用过的任何系统中也没有意义,但你可以利用动态sql来做这样的事情。我希望你有耐心,因为这将令人难以置信地缓慢。但是你要求sql为你获取每个表的每一列的最大值。没有办法快速做到这一点。

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

答案 1 :(得分:1)

您必须使用sp_executesql来运行查询