Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server sp_msforeachtable sử dụng để chỉ chọn những bảng đáp ứng một số điều kiện

Bạn biết cách làm sp_MSforeachtable là không có giấy tờ và có thể biến mất bất cứ lúc nào / được sửa đổi?

Chà, nếu bạn vui lòng bỏ qua điều đó, nó có một tham số khác được gọi là @whereand , được nối vào WHERE mệnh đề của truy vấn nội bộ đang được sử dụng để tìm các bảng (và phải bắt đầu bằng AND ).

Bạn cũng phải biết rằng có một bí danh, o chống lại sysobjects và bí danh thứ hai syso chống lại sys.all_objects .

Sử dụng kiến ​​thức này, bạn có thể tạo @whereand của mình tham số như:

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

Giờ đây, bạn cũng có thể đơn giản hóa command1 của mình , vì bạn biết rằng nó sẽ chỉ được chạy trên các bảng có chứa EMP_CODE cột. Tôi có thể lấy ra COUNT(*) điều kiện cũng vậy, vì tôi không thấy nó đang thêm giá trị gì.

Đã cập nhật dựa trên công việc tiếp theo của bạn và được kiểm tra dựa trên một bảng:

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'')'

(Tôi đã hoàn nguyên @whereand để truy vấn cho EMP_CODE , vì bạn không muốn thay thế giá trị ở đó).

Vấn đề là bạn có thể chuyển tham số đến một thủ tục được lưu trữ hoặc nghĩa đen , nhưng bạn không thể thực hiện các phép tính / kết hợp các hành động giữa chúng - vì vậy tôi đã chuyển việc xây dựng câu lệnh sql thành một hành động riêng biệt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về định dạng 'datetimeoffset' trong SQL Server bằng cách sử dụng chuỗi định dạng chuẩn (T-SQL)

  2. Không thể mở cơ sở dữ liệu mặc định người dùng. Đăng nhập thất bại. sau khi cài đặt SQL Server Management Studio Express

  3. Cách hoạt động của câu lệnh IF trong SQL Server

  4. Khóa tổng hợp duy nhất của SQL Server của hai trường với tự động tăng trường thứ hai

  5. Tôi nhận được Một nỗ lực đã được thực hiện để tải một chương trình có lỗi định dạng không chính xác trên một dự án sao chép SQL Server