我需要更新[ISD_ID]属性的不同表中的选择事件,我该如何实现?
我可以使用此声明获取拥有我正在寻找的记录的表集:
SELECT c1.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c1
INNER JOIN information_schema.COLUMNS c2
ON c1.TABLE_NAME = c2.TABLE_NAME
WHERE c1.COLUMN_NAME LIKE '%isd%id%' and c2.column_name LIKE '%schooldistrict%id%'
所以现在我有一组表名,我想迭代,根据需要更新记录。
根据另一篇文章的建议,我已经阅读了动态SQL。所以我可以做EXECUTE IMMEDIATE: ('update' + @tablename + ' set ISD_ID=37 where SchoolDistrictID=46')
。
我的问题是:如何迭代我的表名并将它们替换为上述语句作为@tablename
变量,以便我可以更新每个表中的值?
如果需要,我也可以使用.NET和SSIS。
提前致谢;我不太熟悉SQL,并且很高兴有机会学习。
答案 0 :(得分:0)
一种奇怪的方式 您可以使用未记录的存储过程(请不要告诉Remus Rusanu我说过),something like this。您可以使用@where条件指定表必须包含给定列。
更传统的方式是
老实说,当你以“奇怪的方式”完成时,你最好以传统的方式做到这一点,但我只是想彻底。
答案 1 :(得分:0)
如果要为此使用SSIS,可以将第一个查询的结果带入RecordSet目标。
然后,您可以在保留记录集的变量上创建一个foreach循环 - 然后例如创建一个带有表达式的SQL任务,该表达式将您的"UPDATE " + (DT_STR,255,1252)@[User::tblname] + " SET ....."
作为sqlStatementSource。