Sto cercando di scrivere questa query per trovare tutte le tabelle con colonna specifica con qualche valore specifico. Questo è quello che ho fatto finora -SQL Server sp_msforeachtable utilizzo per selezionare solo quelle tabelle che soddisfano alcune condizioni
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
'
Spero che le mie intenzioni sono chiare, voglio solo di scegliere solo i tavoli dove è presente e in quelle tabelle colonna EMP_CODE
voglio selezionare le righe in cui EMP_CODE='HO081'
.
Edit -
Ora si erge come questo. Ma non sono in grado di sostituire la variabile @EMPCODE
nella query.
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 per voi mostrare cosa si può fare, ma implicitamente che ti dice di non farlo;?) – cairnz
@Damien_The_Unbeliever Supponiamo se scrivo 'IF (SELECT COUNT (*) FROM WHERE EMP_CODE = '' '+ @EMPCODE + '' ')> 0', allora perché mi sta dando una sintassi errata vicino a '+'. Sto cercando di passare il valore 'EMP_CODE' attraverso una variabile. –
@SohamDasgupta - È un po 'complicato diagnosticare questo tipo di problema nella sezione dei commenti, dal momento che avrei davvero bisogno di vedere l'intera query così come è ora, e questo non funzionerà nei commenti. Vorrei ancora interrogare quel particolare pezzo di codice però - perché * contare * il numero di righe corrispondenti invece di selezionarle semplicemente? I set di risultati vuoti sono solitamente abbastanza facili da gestire. –