Tôi đang cố gắng viết truy vấn này để tìm tất cả các bảng có cột cụ thể với một số giá trị cụ thể. Đây là những gì tôi đã thực hiện cho đến nay -SQL Server sp_msforeachtable usage để chỉ chọn những bảng đáp ứng một số điều kiện
EXEC sp_MSforeachtable
@command1='
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=PARSENAME("?",2) AND TABLE_NAME=PARSENAME("?",1) AND COLUMN_NAME="EMP_CODE")
BEGIN
IF (SELECT COUNT(*) FROM ? WHERE EMP_CODE="HO081")>0
BEGIN
SELECT * FROM ? WHERE EMP_CODE="HO081"
END
END
'
Tôi hy vọng intensions của tôi rất rõ ràng, tôi chỉ muốn chỉ chọn những bảng nơi cột EMP_CODE
là hiện tại và trong những bảng tôi muốn chọn những hàng nơi EMP_CODE='HO081'
.
Edit -
Bây giờ nó đứng như thế này. Nhưng tôi không thể thay thế biến số @EMPCODE
trong truy vấn.
DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
EXEC sp_MSforeachtable
@command1='
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
',@whereand='AND O.ID IN (SELECT OBJECT_ID FROM SYS.COLUMNS C WHERE C.NAME='''[email protected]+''')'
+1 cho hiển thị cho bạn những gì bạn có thể làm, nhưng ngầm nói cho bạn để không làm điều đó;?) – cairnz
@Damien_The_Unbeliever Giả sử nếu tôi viết 'IF (SELECT COUNT (*) FROM ĐÂU EMP_CODE = ''' + @EMPCODE + '' ')> 0' thì tại sao nó cho tôi - cú pháp không chính xác gần '+'. Tôi đang cố chuyển giá trị 'EMP_CODE' thông qua một biến. –
@SohamDasgupta - Đó là một chút khó khăn để chẩn đoán loại vấn đề này trong phần ý kiến, vì tôi thực sự cần xem toàn bộ truy vấn vì nó bây giờ là viết tắt, và điều đó sẽ không hoạt động trong các bình luận. Tôi lại một lần nữa sẽ truy vấn đoạn mã cụ thể đó - tại sao * đếm * số hàng phù hợp thay vì chỉ chọn chúng? Các tập kết quả trống thường khá dễ giải quyết. –