我想创建一个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
但我无法在此功能中的EXEC
,SET
或SELECT
中使用RETURN
。
请帮我解决这个问题。
答案 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来运行查询