从所有具有“Where”条件的数据库表中检索所有行
本文关键字:数据库 检索 Where 条件 | 更新日期: 2023-09-27 18:31:34
我有一个有 60 个表的数据库。在其中一些表中,我有一个名为"Open"的位列,如果用户未使用记录(用户从 C# 应用程序访问数据库),则存储 0,如果记录正在使用中,则存储 1。好吧,我需要从数据库中"open"列值为真或 1 的所有表中获取所有记录。
这甚至可能做到吗?
以下是未记录sp_MSforeachtable的简单用法:
EXEC sp_MSforeachtable
@command1='SELECT * FROM ? WHERE Open=1',
@whereand='AND o.id in (select object_id from sys.columns c where c.name=''Open'')'
获取数据库中表列表的快速代码段。 使用光标循环检查答案,他们有名为 [open] 的 fld,如果它这样做,则构建一个 SQL 语句并执行此 SQL 字符串。
CREATE PROCEDURE usp_BulkTableOpenReport
AS
BEGIN
DECLARE @TBLS AS TABLE (REF INT IDENTITY (0,1), TABLENAME NVARCHAR(100), TABLEID BIGINT);
DECLARE @TBL AS NVARCHAR(100);
DECLARE @TBLID AS BIGINT;
DECLARE @SQL AS NVARCHAR(MAX);
DECLARE @I INT = 0;
DECLARE @M INT = 0;
DECLARE @V INT = 0
INSERT INTO @TBLS(TABLENAME,TABLEID)
SELECT NAME,OBJECT_ID FROM sys.tables
SELECT @M = MAX(REF) FROM @TBLS
WHILE @I <= @M
BEGIN
SELECT @TBL = TABLENAME, @TBLID= TABLEID FROM @TBLS WHERE REF = @I
/* CHECK TO MAKE INSURE THAT A FLD CALLED [OPEN] EXIST. */
SELECT @V = COUNT(*) FROM SYS.columns WHERE name = 'OPEN' AND OBJECT_ID = @TBLID
IF @V != 0
BEGIN
SET @SQL = 'SELECT * FROM [' + @TBL + '] WHERE [OPEN] = 1'
EXEC SP_EXECUTESQL @SQL
END;
SET @I = @I + 1
END;
END
GO
从 c# 应用程序可执行文件中,查询"EXEC usp_BulkTableOpenReport"然后循环访问表输出。