在Select中使用T-SQL函数,只返回有值的列。

26 浏览
0 Comments

在Select中使用T-SQL函数,只返回有值的列。

我有一个查询,它只返回带有值的列。我该如何将其添加到一个函数中,以便我可以在任何查询中使用它?它会成为where子句中的一个函数吗?

创建表test1

(

s_no int not null,

name varchar(10) not null,

address varchar(10) null,

emailid varchar(100) null

)

将数据插入test1表中 (s_no, name)

values (1,'A'),(2,'B'),(3,'C')

声明变量 @column_list varchar(8000),

@counter int

将 @column_list 设置为空字符串

将 @counter 设置为0

当syscolumns表中的最大列编号大于 @counter 时执行以下操作

begin

将 @counter 设置为 syscolumns 表中 id = object_id('test1') 和 isnullable= 0 的最小列编号

将 @column_list 设置为 @column_list + ',' + (Select name from syscolumns where id = object_id('test1') and isnullable= 0 and colid = @counter)

end

将 @column_list 设置为从第2个字符开始,长度为len(@column_list)的子字符串

声明变量 @sql varchar(8000)

将 @sql 设置为 'select ' + @column_list + ' from test1'

打印 @sql

执行 @sql

从 [dbo].[test1] 表中选择所有列

0
0 Comments

这个问题的原因是,用户想要在一个查询中只返回有值的列,而不返回空值的列。为了解决这个问题,用户提出了一个存储过程的解决方案,其中用户提供表名作为参数,并构建查询。然而,这个解决方案在使用存储过程进行连接时不起作用,因为它需要创建一个临时表来存储存储过程的结果。由于存储过程每次运行时返回的列可能不同,所以无法事先知道临时表应该具有与存储过程返回的列相同的列数和类型。因此,用户无法轻松地添加where子句和连接。

0