IF OBJECT_ID('tempdb..#TABLES') IS NOT NULL
DROP TABLE #TABLES
SELECT TABLE_NAME,ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS RNUM into #Tables FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME Like '%Client_ID%' Or COLUMN_NAME Like '%ClientID%' AND
TABLE_NAME NOT LIKE 'CR%' AND TABLE_NAME NOT LIKE 'Z%' AND TABLE_NAME NOT LIKE '%_CHANGE'
AND TABLE_NAME NOT LIKE 'VW%'
IF OBJECT_ID('tempdb..#finaldata') IS NOT NULL
DROP TABLE #finaldata
CREATE TABLE #finaldata(table_name VARCHAR(100),noofrows INT,Last_modified DATETIME)
DECLARE @start INT=1,@end INT,@tablename VARCHAR(100),@Client_ID INT=1124,@query VARCHAR(MAX)
SELECT @end=MAX(RNUM) FROM #Tables
WHILE @start<=@end
BEGIN
SELECT @tablename=TABLE_NAME FROM #Tables WHERE RNUM=@start
SELECT @query=CONCAT('INSERT INTO #finaldata(table_name,noofrows)
SELECT ','''',@tablename,'''',' ,COUNT(1) FROM ',@tablename ,' WITH(NOLOCK) WHERE Client_id=',@Client_ID)
EXEC(@query)
SELECT @start=@start+1
END
select * from #finaldata where noofrows>0
--select * from FORM_DETAIL where Client_id = -1
结果就像
1行受影响
1行受影响
错误207,级别16,列名client_id无效。
答案 0 :(得分:1)
@HoneyBadger正确评论,您正在搜索多个列名,但已将单个列名硬编码到动态SQL中。
您可以通过将列名和表名一起存储,然后在动态SQL中使用它来按以下方式更正此问题:
IF OBJECT_ID('tempdb..#TABLES') IS NOT NULL BEGIN
DROP TABLE #TABLES;
END
-- I assume you want brackets as I have shown below to ensure the 'and-ed' conditions apply to both 'or-ed' conditions
SELECT TABLE_NAME, COLUMN_NAME, ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS RNUM
into #Tables
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (COLUMN_NAME Like '%Client_ID%' Or COLUMN_NAME Like '%ClientID%')
AND TABLE_NAME NOT LIKE 'CR%' AND TABLE_NAME NOT LIKE 'Z%' AND TABLE_NAME NOT LIKE '%_CHANGE'
AND TABLE_NAME NOT LIKE 'VW%';
IF OBJECT_ID('tempdb..#finaldata') IS NOT NULL BEGIN
DROP TABLE #finaldata;
END
CREATE TABLE #finaldata(table_name VARCHAR(100), noofrows INT, Last_modified DATETIME);
DECLARE @start INT=1, @end INT, @tablename VARCHAR(100), @columnname VARCHAR(100), @Client_ID INT=1124, @query VARCHAR(MAX);
SELECT @end = MAX(RNUM)
FROM #Tables;
WHILE @start <= @end BEGIN
SELECT @tablename=TABLE_NAME, @columnname = COLUMN_NAME FROM #Tables WHERE RNUM = @start;
SELECT @query = CONCAT('INSERT INTO #finaldata(table_name, noofrows)
SELECT ','''',@tablename,'''',', COUNT(1) FROM ', @tablename, ' WITH (NOLOCK) WHERE ' + @columnname + ' = ', @Client_ID);
print(@Query)
--EXEC(@query);
SELECT @start=@start+1;
END
select * from #finaldata where noofrows>0