如何在SQL Server中使用动态列名'从表中选择MAX(@variable)从列中最大化

时间:2019-01-09 06:43:57

标签: sql-server sql-server-2014

我想获取MAX列中的int,但是我的列正在循环变量。

我已经尝试过

Declare @sql nvarchar(max)
Declare @gender nvarchar(10)
Declare @max int
Declare @col int

set @col = 'UserId'
set @gender='0'
set @sql = 'Select @max  = MAX(@col) From CustomerTbl Where Gender=@gender'

print @sql

Execute sp_executesql  @sql , N'@gender nvarchar(10), @count int OUTPUT ,@col int',@gender,@max OUTPUT,@col
sELECT @max`

我想要变量@max中每一列或当前列的最大值,但是我遇到错误

  

将varchar值'UserId'转换为数据类型int时转换失败。

1 个答案:

答案 0 :(得分:2)

您将@col变量声明为int,但是您试图设置'UserId'文本。这显然不可能发生。

在构造动态查询时设置列名称(UserId

set @sql = 'Select @max  = MAX(UserId) From CustomerTbl Where Gender=@gender'

如果获得了列名运行时,则将@col变量的类型更改为nvarchar(128),并且不使用参数,而是将其串联起来:

set @sql = 'Select @max  = MAX(' + @col + ') From CustomerTbl Where Gender=@gender'