使用“Where”条件检索所有数据库表中的所有行

时间:2014-11-21 14:51:18

标签: c# sql sql-server conditional-statements

我有一个包含60个表的数据库。在其中一些表中,我有一个名为“Open”的列,如果用户没有使用该记录(来自C#应用程序的用户访问DB),则存储0,如果记录正在使用,则存储1。 好吧,我需要从我的数据库中的所有表中获取“open”列值为true或1的所有记录。

这甚至可以吗?

2 个答案:

答案 0 :(得分:2)

这里简单使用了未记录的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'')'

答案 1 :(得分:1)

获取数据库中表格列表的快速代码。使用游标循环检查它的答案,他们将fld命名为[open],如果它构建一个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#应用程序执行查询&#34; EXEC usp_BulkTableOpenReport&#34;然后遍历表输出。