列名含有某字符串的列 作为搜索条件

十三- 2015-09-23 10:23:53

Product 表结构如下
ProductID BrandName PModel 口径-200-1-koujing 压力等级-300-1-yalidengji
1 ELSTER TRZ2 G65 DN50 PN10bar
2 天信 TRZ2 G70 DN100 PN16bar
3 天信 TRZ2 G65 DN50 PN200bar


现在想要 列名中含有 "koujing"的列,以这一列为搜索条件, 且值为DN50 的记录
结果如下
ProductID BrandName PModel 口径-200-1-koujing 压力等级-300-1-yalidengji
1 ELSTER TRZ2 G65 DN50 PN10bar
3 天信 TRZ2 G65 DN50 PN200bar
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天-笑 2015-09-23
  • 打赏
  • 举报
回复

declare @strSql varchar(1000),
		@Rows	int,
		@Row	int = 1,
		@TabName varchar(50),
		@ColName varchar(50)
declare @ObjTab table (RowNO int identity(1,1) not null,TabName varchar(50),ColName varchar(50))
insert into @ObjTab
select distinct b.Name as TabName, a.Name as ColName from sys.columns a inner join sys.tables b on a.object_id = b.object_id
where a.name like '%koujing%'
set @Rows = @@rowcount
while(@Row <= @Rows)
begin
	select @TabName = TabName,@ColName = ColName  FROM @ObjTab where RowNO = @Row
	set @strSql = ' select * from ' + @TabName + ' where ' + @ColName + ' = ''DN50'' '
	print @strSql
	exec (@strSql)
	set @Row = @Row + 1
end
spiritofdragon 2015-09-23
  • 打赏
  • 举报
回复
Table_1改成Product
spiritofdragon 2015-09-23
  • 打赏
  • 举报
回复
declare @where varchar(1000)='',@sql varchar(max) 
--如果koujing唯一则无所谓;如果不唯一,你要考虑多个字段='DN50'的关系是 and 还是 or
select @where=@where+' and '+name +'=''DN50''' from syscolumns where id=OBJECT_ID(N'Product') and name like'%koujing%'
if LEN(@where)>0 
	set @where=substring(@where,5,1000)
set @sql='select * from Table_1 where '+@where;
print @sql
exec (@sql)
qq_17482963 2015-09-23
  • 打赏
  • 举报
回复
declare @col varchar(100),@sql varchar(max)

select @col=ISNULL(@col+',','')+name from syscolumns where id=OBJECT_ID(N'Product') and name like'%koujing%'
print @col
set @sql='
	select '+@col+' from Product
'
exec (@sql)
能想到的只有这个,看看别人有没有更好的方法
十三- 2015-09-23
  • 打赏
  • 举报
回复
引用 1 楼 spiritofdragon 的回复:
列名中含有 "koujing"的列 难道你的表字段名都不固定?有可能叫koujing1,也可能叫koujing2?
是的,列名是动态生成的.. koujing1,kongjing2 到不至于,一般就是列名的拼音 ,koujing,yalidengji,什么的, 列名中含有的字符串 一般是唯一的..
spiritofdragon 2015-09-23
  • 打赏
  • 举报
回复
列名中含有 "koujing"的列 难道你的表字段名都不固定?有可能叫koujing1,也可能叫koujing2?
十三- 2015-09-23
  • 打赏
  • 举报
回复
引用 4 楼 spiritofdragon 的回复:
declare @where varchar(1000)='',@sql varchar(max) 
--如果koujing唯一则无所谓;如果不唯一,你要考虑多个字段='DN50'的关系是 and 还是 or
select @where=@where+' and '+name +'=''DN50''' from syscolumns where id=OBJECT_ID(N'Product') and name like'%koujing%'
if LEN(@where)>0 
	set @where=substring(@where,5,1000)
set @sql='select * from Table_1 where '+@where;
print @sql
exec (@sql)
这个貌似不错! 如果有多个条件呢 比如有两个,koujing,yalidengji

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧