Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Penggunaan SQL Server sp_msforeachtable untuk memilih hanya tabel yang memenuhi beberapa kondisi

Anda tahu bagaimana sp_MSforeachtable tidak didokumentasikan, dan dapat hilang kapan saja/diubah?

Nah, jika Anda dengan senang hati mengabaikannya, ia memiliki parameter lain yang disebut @whereand , yang ditambahkan ke WHERE klausa kueri internal yang digunakan untuk menemukan tabel (dan harus dimulai dengan AND ).

Kamu juga harus tahu kalau ada alias, o terhadap sysobjects , dan alias kedua syso terhadap sys.all_objects .

Dengan menggunakan pengetahuan ini, Anda dapat membuat @whereand parameter sebagai:

EXEC sp_MSforeachtable 
@command1='...',
@whereand='AND o.id in (select object_id from sys.columns c where c.name=''EMP_CODE'')'

Sekarang Anda juga dapat menyederhanakan command1 , karena Anda tahu itu hanya akan dijalankan terhadap tabel yang berisi EMP_CODE kolom. Saya mungkin akan mengeluarkan COUNT(*) kondisi juga, karena saya tidak melihat nilai apa yang ditambahkan.

Diperbarui berdasarkan pekerjaan Anda selanjutnya, dan diuji pada satu tabel:

DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
declare @sql nvarchar(2000)
set @sql = '
    DECLARE @COUNT AS INT
    SELECT @COUNT=COUNT(*) FROM ? WHERE EMP_CODE='''[email protected]+'''
    IF @COUNT>0
    BEGIN
        PRINT PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
        --PRINT ''DELETE FROM ''+PARSENAME("?",1)+'' WHERE EMP_CODE='''''[email protected]+'''''''
    END
'
EXEC sp_MSforeachtable 
@[email protected],@whereand='AND O.ID IN (SELECT OBJECT_ID FROM SYS.COLUMNS C WHERE C.NAME=''EMP_CODE'')'

(Saya telah mengembalikan @whereand untuk menanyakan EMP_CODE , karena Anda tidak ingin mengganti nilainya di sana).

Masalahnya adalah, Anda dapat melewati parameter ke prosedur tersimpan, atau literal , tetapi Anda tidak dapat melakukan penghitungan/menggabungkan tindakan di antara keduanya - jadi saya memindahkan konstruksi pernyataan sql ke dalam tindakan terpisah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_VALUE() Contoh di SQL Server (T-SQL)

  2. Masukkan semua data datagridview ke database sekaligus

  3. Cara Menonaktifkan Semua Batasan PERIKSA &Kunci Asing dalam Database di SQL Server (Contoh T-SQL)

  4. Buat Profil Publik Default untuk Database Mail di SQL Server (T-SQL)

  5. Memanggil API dari prosedur tersimpan SQL Server