Sql server 如何从特定模式(T SQL)中的所有表中删除特定的公共记录?

Sql server 如何从特定模式(T SQL)中的所有表中删除特定的公共记录?,sql-server,tsql,Sql Server,Tsql,我在一个数据库中有三个模式schema1、schema2、schema3的表。每个模式有两个表schema1.table1、schema1.table2、schema2.table1、schema2.table2。。。。。。。。每个表都有ID列,ID列的值为17、18、19、20、50等。我想从schema1中的所有表中删除记录19, 类似于>从Schema1中的所有表中删除ID19。有办法吗? 感谢您的帮助。请确保这可以通过动态sql完成,您可以将所有需要的表放入带有标识列[id]的临时表中

我在一个数据库中有三个模式schema1、schema2、schema3的表。每个模式有两个表schema1.table1、schema1.table2、schema2.table1、schema2.table2。。。。。。。。每个表都有ID列,ID列的值为17、18、19、20、50等。我想从schema1中的所有表中删除记录19, 类似于>从Schema1中的所有表中删除ID19。有办法吗?
感谢您的帮助。请确保这可以通过动态sql完成,您可以将所有需要的表放入带有标识列[id]的临时表中

CREATE TABLE #temp ---identity column will be used to iterate
(
id INT IDENTITY,
SchemaName VARCHAR(20),
TableName VARCHAR(20),
ColumnName VARCHAR(20)
)
INSERT INTO #temp
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
-- choose your own results with where conditions

DECLARE @SQL VARCHAR(MAX)
DECLARE @Count INT = 1
DECLARE @Schema VARCHAR(20)
DECLARE @Table VARCHAR(20)
DECLARE @Column VARCHAR(20)

WHILE @COUNT <= (SELECT COUNT(*) FROM #temp) 
BEGIN
    SELECT @Schema = SchemaName FROM  #temp WHERE id = @Count
    select @table = TABLENAME FROM #temp WHERE id = @Count
    SELECT @Column = COLUMNNAME FROM #temp WHERE id = @Count
    
    SELECT @sql = 'DELECT FROM '+@Schema+'.'+@Table+ 'WHERE ID = 19'

    --PRINT @SQL
SET @Count = @Count + 1

END

如果打印的查询看起来不错,请将“打印”更改为“执行”。

不是内置的。您必须编写动态SQL。没有从所有表中删除的语法。如果要针对多个对象运行DELETE,则需要多个DDL语句。如果我诚实的话,针对6条语句编写DELETE语句有些琐碎。你的尝试失败了怎么办?您的尝试是什么?@larmu试图从sys.columns和schema中拉入并连接,但没有成功。Juts和add这些表没有任何PK或FK.larmu;那是新的。就像我说的,你有6张桌子;只需写出这6条语句。@Larnu这里的表数就是一个例子,实际上,它接近100条,所以不可能写出那么多语句。谢谢,@jacheng。查找打印工作,但替换为Exec,抛出错误并查找存储过程“找不到存储过程”。任何想法@卡塔。不确定您的代码是什么样子的,我在查询中没有使用存储过程。另一种方法是复制打印结果,然后执行。谢谢@Jiacheng。遵循相同的代码。刚刚更改了临时表的名称。谢谢。然后,当您更改为EXEC@SQLMsg 2812,级别16,状态62,第37行找不到存储过程“DELECT from AA.tblempWHERE empID=10”时,请发送打印结果和完整的错误消息。Msg 2812,级别16,状态62,第37行找不到存储过程'DELECT FROM AA.tblempWHERE empID=10'。