如何将 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
但我无法在该函数内的 SET
、SELECT
或 RETURN
中使用 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
我想创建一个 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
但我无法在该函数内的 SET
、SELECT
或 RETURN
中使用 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