首页 > 解决方案 > 如何在 SQL Server 中为阈值创建动态过程?

问题描述

我有 40 多个表,基于某个列限制,需要获取一个自然键(这是超出阈值限制的表的自然键)和一个列名、列值超出限制。

示例:表f_revenue有一个列rev_amt。自然键列是revnbrlastupdated。如果rev_amt > 3000000再插入自然键( revnbr, lastupdated), f_revenue, rev_amt, rev_amt 超过3000000

如何在 SQL Server 中创建一个过程来动态滚动 40 多个表并按照上面的示例进行操作?

标签: sql-servertsqlstored-procedures

解决方案


这应该有效。(弹簧从上面的评论登上)

DECLARE @NAME VARCHAR(100)
DECLARE @SQL NVARCHAR(300)

DECLARE CUR CURSOR FOR
SELECT a.NAME 
FROM   SYS.TABLES a JOIN 
SYS.COLUMNS b ON a.object_id=b.object_id 
WHERE b.name IN ('nacturalkey', 'f_revenue', 'rev_amt') 

OPEN CUR

FETCH NEXT FROM CUR INTO @NAME

WHILE @@FETCH_STATUS = 0
  BEGIN 

      SET @SQL = 'SELECT nacturalkey, f_revenue, rev_amt FROM '+@Name+' WHERE rev_amt > 3000000' 

      PRINT @SQL
      EXEC Sp_executesql
        @SQL

      FETCH NEXT FROM CUR INTO @NAME
  END

CLOSE CUR 

推荐阅读