2

私のクエリは 26 個のテーブル名を返します。

select name from sys.tables where name like '%JPro_VP_Service%'

今、上記のクエリから返されるすべてのテーブルをチェックインするクエリを作成しようとしています。

--consider this is my first table 
select * from JPro_VP_Service 
where row_id like '%1-101%' or row_id like '%1-102%'
-- likewise I want to search in 26 tables return from above query    

これを達成するには、 for または cursor を書く必要があると思います。

誰でもこれを達成する方法を手伝ってもらえますか?

4

4 に答える 4

1

これを行う最も簡単な方法は次のとおりです。

SELECT 'select * from ' + name 
       + ' where row_id         like ''%1-101%'' or row_id like ''%1-102%''' 
FROM   sys.tables 
WHERE  name LIKE '%JPro_VP_Service%' 

同じ条件ですべてのテーブルをまとめて取得します。それらを一緒に実行できます。

于 2012-10-23T06:46:08.590 に答える
0

結果をテーブルに保存したい場合もありますが、このルートは機能する可能性があります。

DECLARE @tables TABLE(
ID INT IDENTITY(1,1),
Name VARCHAR(100)
)

INSERT INTO @tables (Name)
SELECT name 
FROM sys.tables 
WHERE name like '%JPro_VP_Service%'

DECLARE @b INT = 1, @m INT, @table VARCHAR(100), @cmd NVARCHAR(MAX)
SELECT @m = MAX(ID) FROM @tables

WHILE @b <= @m
BEGIN

SELECT @table = Name FROM @tables WHERE ID = @b

SET @cmd = 'select * from ' + @table + '
where row_id like ''%1-101%'' or row_id like ''%1-102%''
'

EXECUTE sp_executesql @cmd

SET @b = @b + 1
SET @cmd = ''

END
于 2013-12-16T14:51:35.497 に答える
0

はい、これにはカーソルを使用する必要があり、おそらく動的SQLも使用する必要があります

こちらもご覧ください

SQL Server で動的 SQL ステートメントを生成する

動的 SQL の長所と短所

于 2012-10-23T06:44:06.137 に答える
0
DECLARE @mn INT 
DECLARE @mx INT 
DECLARE @tblname VARCHAR(100); 

WITH cte 
     AS (SELECT Row_number() 
                  OVER ( 
                    ORDER BY (SELECT 0)) AS rn, 
                name 
         FROM   sys.tables 
         WHERE  name LIKE '%JPro_VP_Service%') 
SELECT @mn = Min(rn), 
       @mx = Max(rn) 
FROM   cte 

WHILE( @mn >= @mx ) 
  BEGIN 
      SELECT @tblname = name 
      FROM   cte 
      WHERE  rn = @mn 

      SELECT * 
      FROM   @tblname 
      WHERE  row_id LIKE '%1-101%' 
              OR row_id LIKE '%1-102%' 

      --Do something else 
      SET @mn=@mn + 1 
  END 
于 2012-10-23T06:46:23.907 に答える