搜索存储过程返回截止列数据

阿尔玛

我有一个存储过程,该过程搜索数据库中的所有表并返回具有搜索值的表。

我的问题是我要搜索的值是表列之一的内容中XML内的值。

当该存储过程返回XML时,XML被切断,直到XML中间为止。我如何更改存储过程以从该列返回所有XML。

这是我的存储过程。

ALTER PROC [dbo].[SearchAllTables]
   (@SearchStr nvarchar(100))
AS
BEGIN
    DECLARE @Results TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(max))

    SET NOCOUNT ON

    DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
    SET  @TableName = ''
    SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

    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)

          IF @ColumnName IS NOT NULL
          BEGIN
             INSERT INTO @Results
               EXEC ('SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                      FROM ' + @TableName + ' (NOLOCK) ' +
                     ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2)
          END
      END 
  END

  SELECT * FROM @Results
END
用户名

如何使用实际上提供查询的搜索技术,您可以通过它使用这些列,这就是我的工作方式,希望对您有所帮助

ALTER PROCEDURE SP_SearchDBForValue 
    @search_string  VARCHAR(100)
AS
BEGIN

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'SearchResultTableColumn')
    CREATE TABLE SearchResultTableColumn (SearchStr VARCHAR(101), RecCount SMALLINT, TableName VARCHAR(100), ColumnName VARCHAR(100), CreateDate DATETIME Default GETDATE())
ELSE
    DELETE FROM SearchResultTableColumn 

DECLARE 
@table_name     SYSNAME, 
@table_id       INT,
@column_name    SYSNAME,
@sql_string     VARCHAR(2000)

DECLARE tables_cur CURSOR FOR SELECT name, object_id FROM sys.objects WHERE type = 'U'

OPEN tables_cur

FETCH NEXT FROM tables_cur INTO @table_name, @table_id

WHILE (@@FETCH_STATUS = 0)
BEGIN
    DECLARE columns_cur CURSOR FOR SELECT name FROM sys.columns WHERE object_id = @table_id AND system_type_id IN (167, 175, 231, 239, 35)

    OPEN columns_cur

    FETCH NEXT FROM columns_cur INTO @column_name
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        IF @table_name <> 'SearchResultTableColumn' 
        BEGIN
          SET @sql_string = 'DECLARE @RecCount SMALLINT '+
              'IF EXISTS (SELECT * FROM ' + @table_name + ' WHERE ' + @column_name + ' LIKE ''%' + @search_string + '%'') '+
                'BEGIN SELECT @RecCount = COUNT(*) FROM ' + @table_name + ' WHERE ' + @column_name + ' LIKE ''%' + @search_string + '%'' '+
                'INSERT INTO SearchResultTableColumn VALUES( '''+@search_string+''', @RecCount,''' + @table_name + ''', ''' + @column_name + ''',GETDATE()) END '

            EXECUTE(@sql_string)
        END
        FETCH NEXT FROM columns_cur INTO @column_name
    END

    CLOSE columns_cur

    DEALLOCATE columns_cur

    FETCH NEXT FROM tables_cur INTO @table_name, @table_id
END

CLOSE tables_cur

DEALLOCATE tables_cur
END;
GO

DECLARE @SearchStr VARCHAR (400)
BEGIN
 SET @SearchStr = 'A1000'
 EXECUTE SP_SearchDBForValue @SearchStr
 SELECT RecCount, 'SELECT '+ColumnName+' ColName, * FROM '+TableName+ ' WHERE  '+ColumnName+' LIKE ''%' +SearchStr+ '%''' FROM SearchResultTableColumn
END
GO

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从存储过程数据类型SQL确定返回的列

来自分类Dev

带有存储器的alpha-beta搜索何时返回截止值?

来自分类Dev

OpenRowSet存储过程返回的数据捕获

来自分类Dev

从SQL Server存储过程返回数据

来自分类Dev

实体框架:执行存储过程以返回不同的列和列数据类型

来自分类Dev

Postgresql中的存储过程返回重复的列

来自分类Dev

Postgresql中的存储过程返回重复的列

来自分类Dev

插入行后的SQL Server存储过程返回列数据的字符串值被截断

来自分类Dev

Mysql存储过程搜索

来自分类Dev

存储过程在返回的日期不返回任何数据

来自分类Dev

存储过程不返回任何列,仅返回整数

来自分类Dev

SSMS存储过程未显示截止日期的记录

来自分类Dev

返回更新存储过程

来自分类Dev

从存储过程返回查询

来自分类Dev

从存储过程返回XML

来自分类Dev

从存储过程返回更新

来自分类Dev

从存储过程返回输出

来自分类Dev

如何使用SqlDataReader获取存储过程返回的分组数据?

来自分类Dev

存储过程和计划的作业返回不同的数据

来自分类Dev

如何计算存储过程返回多少数据?

来自分类Dev

无法从存储过程返回varbinary数据类型

来自分类Dev

SSRS存储过程CASE语句未返回到数据集

来自分类Dev

通过存储过程将数据列表返回给 dapper

来自分类Dev

如何在数据库中查询任何返回特定名称的字段/列值的存储过程?

来自分类Dev

SQL:选择要从存储过程返回的不同列

来自分类Dev

如何为存储过程中的列返回空结果

来自分类Dev

使用通配符搜索的存储过程

来自分类Dev

如何使用存储过程调用Web服务,该存储过程返回json并使用sql server将数据存储在表中?

来自分类Dev

将存储过程输出数据插入表的列中

Related 相关文章

  1. 1

    从存储过程数据类型SQL确定返回的列

  2. 2

    带有存储器的alpha-beta搜索何时返回截止值?

  3. 3

    OpenRowSet存储过程返回的数据捕获

  4. 4

    从SQL Server存储过程返回数据

  5. 5

    实体框架:执行存储过程以返回不同的列和列数据类型

  6. 6

    Postgresql中的存储过程返回重复的列

  7. 7

    Postgresql中的存储过程返回重复的列

  8. 8

    插入行后的SQL Server存储过程返回列数据的字符串值被截断

  9. 9

    Mysql存储过程搜索

  10. 10

    存储过程在返回的日期不返回任何数据

  11. 11

    存储过程不返回任何列,仅返回整数

  12. 12

    SSMS存储过程未显示截止日期的记录

  13. 13

    返回更新存储过程

  14. 14

    从存储过程返回查询

  15. 15

    从存储过程返回XML

  16. 16

    从存储过程返回更新

  17. 17

    从存储过程返回输出

  18. 18

    如何使用SqlDataReader获取存储过程返回的分组数据?

  19. 19

    存储过程和计划的作业返回不同的数据

  20. 20

    如何计算存储过程返回多少数据?

  21. 21

    无法从存储过程返回varbinary数据类型

  22. 22

    SSRS存储过程CASE语句未返回到数据集

  23. 23

    通过存储过程将数据列表返回给 dapper

  24. 24

    如何在数据库中查询任何返回特定名称的字段/列值的存储过程?

  25. 25

    SQL:选择要从存储过程返回的不同列

  26. 26

    如何为存储过程中的列返回空结果

  27. 27

    使用通配符搜索的存储过程

  28. 28

    如何使用存储过程调用Web服务,该存储过程返回json并使用sql server将数据存储在表中?

  29. 29

    将存储过程输出数据插入表的列中

热门标签

归档