我正在通過AdventureWorks2008R2數據庫工作,並試圖找出是否有一種方法來遍歷此數據庫中的所有表,然後給出一個條件遍歷該表的特定列中的行?如何迭代數據庫中的表格,然後基於條件對這些表格行進行迭代?
目前我有
SELECT DISTINCT
INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION,TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ('%date%') AND COLUMN_NAME Not LIKE '%JobCandidate%'
;
我想什麼從這裏做的就是去通過這些表,然後他們行改變基於給定條件的日期。
在非SQL代碼和適度寬鬆的僞它可能是這樣的
FOR TABLES
SELECT A TABLE WITH A COLUMN THAT HAS A DATE IN IT
FOR COLUMN_WITH_DATE_HEADER
IF ROW HAS DATE GIVEN SOME CONDITION
UPDATE ROW IN THAT TABLE
任何人都可以幫助嗎?
在此先感謝!
UPDATE
這裏是我創建從@Mars解決方案適應它的代碼。
SELECT DISTINCT
IDENTITY(int,1,1) AS SN,
INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
, TABLE_SCHEMA
, TABLE_NAME
, COLUMN_NAME
INTO #temptable
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ('%date%')
AND COLUMN_NAME Not LIKE '%JobCandidate%' AND
COLUMN_NAME NOT LIKE '%BirthDate%';
DECLARE @start INT=1
, @end INT=0
, @query NVARCHAR(MAX)='';
DECLARE @conditions NVARCHAR(MAX)='' ;
SELECT @end=MAX(SN)
FROM #temptable
WHILE (@start<[email protected])
BEGIN
SELECT
@conditions = ' WHERE ' + 'YEAR('+ COLUMN_NAME +')' + ' < 2009',
@query= 'UPDATE '+TABLE_SCHEMA+'.'
+TABLE_NAME +' SET '+ COLUMN_NAME
+' = dateadd(YEAR,8,' + COLUMN_NAME + ')'
FROM #temptable
WHERE SN [email protected]
EXEC (@query)
SET @start+=1
END
DROP TABLE #temptable
可能的複製(http://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables) – STLDeveloper