• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQL Server数据库全库搜索字符串

sqlserver 海叔叔 6个月前 (12-04) 15次浏览 已收录 0个评论
文章目录[隐藏]

关键词:sql,sqlserver,quotename

SQL Server数据库全库搜索字符串

DECLARE @keyWord NVARCHAR(128) = 'A'
  
DECLARE @Results AS TABLE (
    ColumnName NVARCHAR(370),
    ColumnValue NVARCHAR(3630)
    ) 
   
SET NOCOUNT ON
   
DECLARE @TableName NVARCHAR(256),
    @TableName2 NVARCHAR(258),
    @ColumnName NVARCHAR(128),
    @ColumnName2 NVARCHAR(130),
    @SearchStr2 NVARCHAR(110)
   
SET @TableName = ''
   
WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = (
            SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
            FROM INFORMATION_SCHEMA.TABLES
            WHERE TABLE_TYPE = 'BASE TABLE'
                AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
                AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
            ) 
   
    WHILE (@TableName IS NOT NULL)
        AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName = (
                SELECT MIN(QUOTENAME(COLUMN_NAME))
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
                    AND TABLE_NAME = PARSENAME(@TableName, 1)
                    AND DATA_TYPE IN (
                        'char',
                        'varchar',
                        'nchar',
                        'nvarchar'
                        )
                    AND QUOTENAME(COLUMN_NAME) > @ColumnName
                ) 
        SET @TableName2 = REPLACE(@TableName, '''', '''''')
   
        IF @ColumnName IS NOT NULL
        BEGIN
            SET @ColumnName2 = REPLACE(@ColumnName, '''', '''''')
   
            INSERT INTO @Results
            EXEC (
                    'IF EXISTS(SELECT TOP 1 1 FROM ' + @TableName + ' (NOLOCK) WHERE ' + @ColumnName + ' LIKE ''%' + @keyWord + '%'') SELECT DISTINCT ''' + @TableName2 + '.' + @ColumnName2 + ''', LEFT(' + @ColumnName + ', 3630)
                                    FROM ' + @TableName + ' (NOLOCK) WHERE ' + @ColumnName + ' LIKE ''%' + @keyWord + '%'''
                    )
        END
    END
END
   
SELECT ColumnName,
    DATA_TYPE + CASE
        WHEN [CHARACTER_MAXIMUM_LENGTH] IS NULL
            THEN CASE
                    WHEN [DATA_TYPE] = 'decimal'
                        THEN '(' + CAST([NUMERIC_PRECISION] AS VARCHAR) + ',' + CAST([NUMERIC_SCALE] AS VARCHAR) + ')'
                    ELSE ''
                    END
        ELSE '(' + CASE
                WHEN [CHARACTER_MAXIMUM_LENGTH] = - 1
                    THEN 'MAX'
                ELSE CAST([CHARACTER_MAXIMUM_LENGTH] AS VARCHAR)
                END + ')'
        END [ColumnType],
    ColumnValue
FROM @Results R
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
    ON QUOTENAME(C.[TABLE_SCHEMA]) + '.' + QUOTENAME(C.[TABLE_NAME]) + '.' + QUOTENAME(C.[COLUMN_NAME]) = ColumnName
ORDER BY ColumnName

来源搞代码网《SQL Server数据库全库搜索字符串》http://www.gaodaima.com/68524.html


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址