ahm*_*ady -1 sql sql-server sql-server-2005
我在数据库中的所有表中有一个公共列,我需要通过所有表中的循环来更新此列的值
我尝试使用这段代码但没有发生任何事情
DECLARE TBL_CURSOR CURSOR
FOR ( SELECT Name FROM Sysobjects WHERE Type='U' )
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = '';
DECLARE @TblName NVARCHAR(MAX);
OPEN TBL_CURSOR
FETCH NEXT FROM TBL_CURSOR INTO @TblName
BEGIN
SET @SQL = ' If not exists (select column_name from INFORMATION_SCHEMA.columns where table_name = '+ @TblName +' and column_name = "CommonColumn") update ' + @TblName + ' set CommonColumn= 1 ';
FETCH NEXT FROM TBL_CURSOR INTO @TblName
END
CLOSE TBL_CURSOR
DEALLOCATE TBL_CURSOR
EXEC (@SQL);
Run Code Online (Sandbox Code Playgroud)
有人有更好的想法或修复此代码吗?
您的代码的问题是 if 语句...您正在更新该列(如果它不存在)。
If not exists (select column_name from INFORMATION_SCHEMA....
Run Code Online (Sandbox Code Playgroud)
此外,您每次都会覆盖 @SQL 的值,而不是附加到它。
SET @SQL = ' If not exists....
Run Code Online (Sandbox Code Playgroud)
您不需要循环来执行此操作。您可以使用一个查询构建更新语句,然后执行它。尝试这个
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = '';
SELECT @SQL = @SQL + 'UPDATE ' + QUOTENAME(o.name) + ' SET ' + QUOTENAME(c.name) + ' = 1
'
FROM sysobjects o
JOIN syscolumns c ON o.id = c.id
WHERE c.name = 'CommonColumn'
AND o.type = 'U'
EXEC (@SQL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7645 次 |
| 最近记录: |