用于在视图中的所有列中搜索字符串的SQL函数

用于在视图中的所有列中搜索字符串的SQL函数,sql,tsql,function,view,Sql,Tsql,Function,View,我有一个包含99列和rowid的表: [RowID] [int] NOT NULL, [Col1] [nvarchar](max) NULL, [Col2] [nvarchar](max) NULL, [Col3] [nvarchar](max) NULL, [Col4] [nvarchar](max) NULL, ....... [Col99] [nvarchar](max) NULL 我需要一个可以在Micrsoft SQL Server视图中使用的函数(必须是视图,并且视图中没有变量)

我有一个包含99列和rowid的表:

[RowID] [int] NOT NULL,
[Col1] [nvarchar](max) NULL,
[Col2] [nvarchar](max) NULL,
[Col3] [nvarchar](max) NULL,
[Col4] [nvarchar](max) NULL,
.......
[Col99] [nvarchar](max) NULL

我需要一个可以在Micrsoft SQL Server视图中使用的函数(必须是视图,并且视图中没有变量)来搜索唯一字符串,然后在视图中显示为新字段。我目前的方法是使用case语句搜索每一列,直到找到唯一的字符串。这种方法写出来很麻烦(效率很低),我有几个独特的字符串要搜索

    SELECT     RowID, COALESCE (
    CASE WHEN Col1 LIKE '%UniqueString%' THEN Col1 ELSE NULL END, 
    CASE WHEN Col2 LIKE '%UniqueString%' THEN Col2 ELSE NULL END, 
    CASE WHEN Col3 LIKE '%UniqueString%' THEN Col3 ELSE NULL END, 
    CASE WHEN Col4 LIKE '%UniqueString%' THEN Col4 ELSE NULL END, 
    CASE WHEN Col5 LIKE '%UniqueString%' THEN Col5 ELSE NULL END, 
    CASE WHEN Col6 LIKE '%UniqueString%' THEN Col6 ELSE NULL END,  
    ………..
    CASE WHEN Col99 LIKE '%UniqueString%' THEN Col99 ELSE NULL END) AS [UniequeString] 
    FROM         dbo.TABLE_A
最终视图应具有以下结果:


在您的示例中,
'UNIQUESTRING'
是列的值。如果是这种情况,那么像那样使用
就太过分了。你可以做:

select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
        end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
             then coalesce(col1, col2, . . . col99)
        end)
另一种可能性。看起来,
UNIQUESTRING
位于每列的第一个非空值中。如果是,您可以执行以下操作:

select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
        end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
             then coalesce(col1, col2, . . . col99)
        end)

在您的示例中,
“UNIQUESTRING”
是列的值。如果是这种情况,那么像
那样使用
就太过分了。你可以做:

select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
        end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
             then coalesce(col1, col2, . . . col99)
        end)
另一种可能性。看起来,
UNIQUESTRING
位于每列的第一个非空值中。如果是,您可以执行以下操作:

select (case when 'UNIQUESTRING' in (col1, col2, . . ., col99) then 'UNIQUESTRING'
        end)
select (case when coalesce(col1, col2, . . . col99) like '%UNIQUESTRING%'
             then coalesce(col1, col2, . . . col99)
        end)

如果有超过10列,则不希望显式指定它。相反,请使用:


示例

如果有超过10列,则不希望显式指定它。相反,请使用:


示例

那么字符串对于每行只能在一列或零列中?您有几个唯一的字符串要搜索吗?那么,您在输出列UniqueStrings中显示了什么?因此,对于每一行,字符串只能在一列或零列中?您有几个唯一的字符串要搜索吗?然后在“输出”列中显示您要执行的操作UniqueString@user1783736 . . . 这些公式没有作出这种假设。每个返回可能具有该值的第一列。@user1783736。这些公式没有作出这种假设。每个返回可能具有该值的第一列。