在 SQL 中实现 for 循环以更新行
Implementing a for loop in SQL to update rows
如何在SQL中编写下面的代码?查询将从结果中更新 table 中的每一列。
DECLARE @table_list NVARCHAR -- What data type do I use to hold a list?
DECLARE @column_list NVARCHAR
SET @table_list = (SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO) -- there are more than one results
SET @column_list = (SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO) -- there are more than one results
foreach(@table IN @table_list)
{
foreach(@column IN @column_list)
{
UPDATE @table
SET @column = '101211'
WHERE @column = '10120'
}
}
您可以使用 CURSOR 来充当 foreach 循环:
DECLARE @table NVARCHAR(255)
DECLARE @column NVARCHAR(255)
DECLARE OUTER_CURSOR CURSOR
FOR SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO
OPEN OUTER_CURSOR
FETCH NEXT FROM OUTER_CURSOR INTO @table
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE INNER_CURSOR CURSOR
FOR SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO
OPEN INNER_CURSOR
FETCH NEXT FROM INNER_CURSOR INTO @column
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @strQuery NVARCHAR(MAX)
SET @strQuery = 'UPDATE [' + @table + '] SET [' + @column + '] = ''101211'' WHERE [' + @column + '] = ''10120'';'
EXEC(@strQUERY)
FETCH NEXT FROM INNER_CURSOR INTO @column
END
CLOSE INNER_CURSOR
DEALLOCATE INNER_CURSOR
FETCH NEXT FROM OUTER_CURSOR INTO @table
END
CLOSE OUTER_CURSOR
DEALLOCATE OUTER_CURSOR
T-SQL 没有 FOR loop
,也许它有 WHILE (Transact-SQL)
像下面这样使用SQL:
DECLARE @table_list NVARCHAR -- What data type do I use to hold a list?
DECLARE @column_list NVARCHAR
SET @table_list = (SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO) -- there are more than one results
SET @column_list = (SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO) -- there are more than one results
WHILE @column_list > @table_list
BEGIN
UPDATE @table
SET @column = '101211'
WHERE @column = '10120'
END;
如何在SQL中编写下面的代码?查询将从结果中更新 table 中的每一列。
DECLARE @table_list NVARCHAR -- What data type do I use to hold a list?
DECLARE @column_list NVARCHAR
SET @table_list = (SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO) -- there are more than one results
SET @column_list = (SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO) -- there are more than one results
foreach(@table IN @table_list)
{
foreach(@column IN @column_list)
{
UPDATE @table
SET @column = '101211'
WHERE @column = '10120'
}
}
您可以使用 CURSOR 来充当 foreach 循环:
DECLARE @table NVARCHAR(255)
DECLARE @column NVARCHAR(255)
DECLARE OUTER_CURSOR CURSOR
FOR SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO
OPEN OUTER_CURSOR
FETCH NEXT FROM OUTER_CURSOR INTO @table
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE INNER_CURSOR CURSOR
FOR SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO
OPEN INNER_CURSOR
FETCH NEXT FROM INNER_CURSOR INTO @column
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @strQuery NVARCHAR(MAX)
SET @strQuery = 'UPDATE [' + @table + '] SET [' + @column + '] = ''101211'' WHERE [' + @column + '] = ''10120'';'
EXEC(@strQUERY)
FETCH NEXT FROM INNER_CURSOR INTO @column
END
CLOSE INNER_CURSOR
DEALLOCATE INNER_CURSOR
FETCH NEXT FROM OUTER_CURSOR INTO @table
END
CLOSE OUTER_CURSOR
DEALLOCATE OUTER_CURSOR
T-SQL 没有 FOR loop
,也许它有 WHILE (Transact-SQL)
像下面这样使用SQL:
DECLARE @table_list NVARCHAR -- What data type do I use to hold a list?
DECLARE @column_list NVARCHAR
SET @table_list = (SELECT DISTINCT [ID_TABLE_NAME] FROM dbo.VMO) -- there are more than one results
SET @column_list = (SELECT DISTINCT [USR_COL_NAME] FROM dbo.VMO) -- there are more than one results
WHILE @column_list > @table_list
BEGIN
UPDATE @table
SET @column = '101211'
WHERE @column = '10120'
END;