簡體   English   中英

在其他列中搜索值時檢索表的主鍵值

[英]Retrieve primary key value of table when search for values in other column

我正在使用此代碼段在數據庫的任何表中查找特定的字符串!

DECLARE @searchstring  NVARCHAR(255)
SET @searchstring = '%foo%'

DECLARE @sql NVARCHAR(max)

SELECT @sql = STUFF((
    SELECT ' UNION ALL SELECT ' + COLUMN_NAME + ' ' +
    ' FROM ' + TABLE_NAME + 
    ' WHERE ' + COLUMN_NAME + ' LIKE ''' + @searchstring + ''''
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE DATA_TYPE in ('nvarchar', 'varchar', 'char','nchar')
    FOR XML PATH('')
) ,1, 11, '')


exec (@sql)

但是我想獲得這些條目的主鍵值!

為了獲得特定表的主鍵,我使用了

SELECT ccu.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
    INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON tc.CONSTRAINT_NAME = ccu.Constraint_name 
    WHERE tc.CONSTRAINT_TYPE = 'Primary Key' 
    AND tc.TABLE_NAME = 'tbl_table'

但是我不能兩者兼而有之嗎?

一些表的主鍵可能有多個列,而另一些表可能沒有主鍵。 這使這項任務更加困難,並且結果列必須是一列中的主鍵值列表。

SELECT @sql = STUFF((
    SELECT ' UNION ALL SELECT ' + QUOTENAME(C.COLUMN_NAME) + ', ' +
               ISNULL(STUFF((SELECT '+'', ''+CAST('+QUOTENAME(COLUMN_NAME)+' AS VARCHAR(MAX))'
                             FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
                               INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CU
                                 ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME AND
                                    TC.TABLE_NAME = CU.TABLE_NAME
                             WHERE CU.TABLE_NAME = C.TABLE_NAME AND
                                   TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
                             FOR XML PATH('')), 1, 6, ''), '''''')+' AS PrimaryKeys'+
    ' FROM ' + QUOTENAME(C.TABLE_NAME) + 
    ' WHERE ' + QUOTENAME(C.COLUMN_NAME) + ' LIKE ''' + @searchstring + ''''
    FROM INFORMATION_SCHEMA.COLUMNS AS C
    WHERE C.DATA_TYPE in ('nvarchar', 'varchar', 'char','nchar')
    ORDER BY C.TABLE_NAME
    FOR XML PATH('')
) ,1, 11, '')

SQL小提琴

使用小提琴中的表,生成的查詢將如下所示。

SELECT [Col], 
       CAST([ID] AS VARCHAR(MAX)) AS PrimaryKeys 
FROM [T1] 
WHERE [Col] LIKE '%foo%' 
UNION ALL 
SELECT [Col], 
       CAST([Col] AS VARCHAR(MAX))+', '+CAST([ID] AS VARCHAR(MAX)) AS PrimaryKeys 
FROM [T2] 
WHERE [Col] LIKE '%foo%' 
UNION ALL 
SELECT [Col], 
       '' AS PrimaryKeys 
FROM [T3] 
WHERE [Col] LIKE '%foo%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM