当前位置: 代码迷 >> Sql Server >> sql 查询数据库中多个表中指定料号的行数据。该如何解决
  详细解决方案

sql 查询数据库中多个表中指定料号的行数据。该如何解决

热度:101   发布时间:2016-04-24 08:53:25.0
sql 查询数据库中多个表中指定料号的行数据。
我在SQL中创建了一个数据库(ISOMM),这个数据库中有很多表,它们的名字是USB1th、USB2th、USB3th........USB45th,还有一个USBDownloadlist的表。以上这些表的格式、数据类型都是一样的。这些表中有料号、物料类型、货运单号等等信息。要查询的数据都在USB1th、USB2th、USB3th........USB45th和USBDownloadlist表中,我想通过料号(比如:10000-B22)查询到料号所在行数据。这个应该怎么操作,哪位大神帮帮忙,我先谢谢了。
------解决思路----------------------
你说的太笼统了,如果数据库比较小,可以试试下面这个存储过程
CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(
    @value VARCHAR(1024)
)        
AS
BEGIN

SET NOCOUNT ON;
DECLARE @sql VARCHAR(1024) 
DECLARE @table VARCHAR(64) 
DECLARE @column VARCHAR(64) 

CREATE TABLE #t ( 
    tablename VARCHAR(64), 
    columnname VARCHAR(64) 


DECLARE TABLES CURSOR 
FOR 

    SELECT o.name, c.name 
    FROM syscolumns c 
    INNER JOIN sysobjects o ON c.id = o.id 
    WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239) 
    ORDER BY o.name, c.name 

OPEN TABLES 

FETCH NEXT FROM TABLES 
INTO @table, @column 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] ' 
    SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') ' 
    SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', ''' 
    SET @sql = @sql + @column + ''')' 

    EXEC(@sql) 

    FETCH NEXT FROM TABLES 
    INTO @table, @column 
END 

CLOSE TABLES 
DEALLOCATE TABLES 

SELECT * 
FROM #t 

DROP TABLE #t 


End


--下面是执行语句,先创建好存储过程后再执行,引号里面填写所需查找内容
--EXEC [SP_FindValueInDB] '张三'

------解决思路----------------------
SELECT * FROM usb1th WHERE 料号='10000-B22'
UNION ALL
SELECT * FROM usb2th WHERE 料号='10000-B22'
UNION ALL
...
SELECT * FROM usb45th WHERE 料号='10000-B22'
UNION ALL
SELECT * FROM USBDownloadlist WHERE 料号='10000-B22'
  相关解决方案