Does this not work?
CREATE TABLE MyTable
(
_key_out VARCHAR(10)
, myval int
);
INSERT INTO mytable SELECT 'A', 1
INSERT INTO mytable SELECT 'A', 2
INSERT INTO mytable SELECT 'B', 1
INSERT INTO mytable SELECT 'C', 3
CREATE TABLE MyTable2
(
_key_out VARCHAR(10)
, myval int
);
INSERT INTO mytable2 SELECT 'A', 1
INSERT INTO mytable2 SELECT 'B', 2
INSERT INTO mytable2 SELECT 'B', 3
INSERT INTO mytable2 SELECT 'C', 3
EXEC sp_MSforeachtable 'select tablename=''?'', count(distinct _key_out) from ?'
Gives 3.
If I do this:
EXEC sp_MSforeachtable 'select tablename=''?'', count( _key_out) from ?'
I get 4.