栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL:返回列名,其中列包含给定值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL:返回列名,其中列包含给定值

-- input parameters (guessing on type for @value):DECLARE   @schema SYSNAME = N'dbo',   @table  SYSNAME = N'z',   @value  VARCHAr(64) = '75';-- now, inside the procedure body:DECLARE @sql NVARCHAr(MAX) = N'SELECt ''cols:'' + STUFF(''''';SELECT @sql += N'   + CASE WHEN EXISTS (SELECT 1 FROM '   + QUOTENAME(@schema) + '.' + QUOTENAME(@table)  + ' WHERe TRY_ConVERT(VARCHAr(64), ' + QUOTENAME(c.name)   + ') = @value) THEN '', ' + c.name + ''' ELSE '''' END'FROM sys.tables AS tINNER JOIN sys.columns AS cON t.[object_id] = c.[object_id]INNER JOIN sys.schemas AS sON t.[schema_id] = s.[schema_id]WHERe t.name = @table AND s.name = @schema;SET @sql += N', 1, 1, '''');'PRINT @sql;--EXEC sp_executesql @sql, N'@value VARCHAr(64)', @value;

当您对输出感到满意时,请取消注释

EXEC

因此,让我们考虑一个简单的表:

CREATE TABLE dbo.floob(  a INT,   b VARCHAr(32),   c VARBINARY(22),   d DATE,   e DATETIME,   f ROWVERSION);INSERT dbo.floob(a,b,c,d,e) VALUES( 75, 'foo', 0x00, GETDATE(), GETDATE()),( 21, '75',  0x00, GETDATE(), GETDATE());

现在,基于上述代码的存储过程:

CREATE PROCEDURE dbo.FindStringInAnyColumn  @schema SYSNAME = N'dbo',   @table  SYSNAME,  @value  VARCHAr(64)ASBEGIN  SET NOCOUNT ON;  DECLARE @sql NVARCHAr(MAX) = N'SELECt ''cols:'' + STUFF(''''';  SELECT @sql += N'     + CASE WHEN EXISTS (SELECT 1 FROM '     + QUOTENAME(@schema) + '.' + QUOTENAME(@table)    + ' WHERe TRY_ConVERT(VARCHAr(64), ' + QUOTENAME(c.name)     + ') = @value) THEN '', ' + c.name + ''' ELSE '''' END'  FROM sys.tables AS t  INNER JOIN sys.columns AS c  ON t.[object_id] = c.[object_id]  INNER JOIN sys.schemas AS s  ON t.[schema_id] = s.[schema_id]  WHERe t.name = @table AND s.name = @schema;  SET @sql += N', 1, 1, '''');'  EXEC sp_executesql @sql, N'@value VARCHAr(64)', @value;ENDGO

用法示例:

EXEC dbo.FindStringInAnyColumn @table = N'floob', @value = '75';

输出:

Cols: a, b


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号