特定の値を持つ特定の列を持つすべてのテーブルを検索するために、このクエリを作成しようとしています。これは私がこれまで何をやったかである -SQL Server sp_msforeachtableは、ある条件を満たすテーブルのみを選択するために使用します。
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
'
を私はちょうど列EMP_CODE
が存在し、それらのテーブルに私がEMP_CODE='HO081'
それらの行を選択したいテーブルだけを選択したい、私の内包が明確であることを望みます。
編集 -
今では、このように立っています。しかし、クエリ内の変数@EMPCODE
を置き換えることはできません。
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;?) – cairnz
私は 'IF(SELECT COUNT(*)FROM書く場合とし@Damien_The_Unbeliever WHERE EMP_CODE = '' '+ @EMPCODE + '' ')> 0'それから、なぜ私に与えるのですか? '+'の近くに不正な構文があります。 'EMP_CODE'の値を変数に渡そうとしています。 –
@SohamDasguptaは - 私は本当にそれが今立っているとして、全体のクエリを確認する必要があるだろう、それはコメントで作業するつもりはないので、それは、コメント欄でこの種の問題を診断するには少しトリッキーです。私はその特定のコードを再度クエリするでしょう - 単純にそれらを選択するのではなく、一致する行の数を*カウントする*理由は何ですか?空の結果セットは、通常扱いやすいです。 –