您可以使用information_schema.columns系统视图,无需担心CURSOR
USE <DATABASE_NAME>
GO
SELECT C.TABLE_CATALOG
, C.TABLE_SCHEMA
, C.TABLE_NAME
, C.COLUMN_NAME
, C.DATA_TYPE
, C.CHARACTER_MAXIMUM_LENGTH
, CASE
WHEN C.DATA_TYPE = 'int' THEN '0'
WHEN C.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar')
THEN
CASE
WHEN C.CHARACTER_MAXIMUM_LENGTH <30 then 'UKN'
ELSE 'UnKnown'
END
END 'OUTPUTFROM'
FROM
information_schema.columns C
ORDER BY
TABLE_NAME
插入
;WITH cteX
AS(
SELECT C.TABLE_CATALOG
, C.TABLE_SCHEMA
, C.TABLE_NAME
, C.COLUMN_NAME
, C.DATA_TYPE
, C.CHARACTER_MAXIMUM_LENGTH
, CASE
WHEN C.DATA_TYPE = 'int' THEN '0'
WHEN C.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar')
THEN
CASE
WHEN C.CHARACTER_MAXIMUM_LENGTH <30 then 'UKN'
ELSE 'UnKnown'
END
END 'OUTPUTFROM'
FROM
information_schema.columns C
)
INSERT INTO dbo.TABLE
( database_name, table_schema, table_name, column_name, Output_from)
SELECT
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, OUTPUTFROM
FROM
cteX X
更新
;WITH cteX
AS(
SELECT C.TABLE_CATALOG
, C.TABLE_SCHEMA
, C.TABLE_NAME
, C.COLUMN_NAME
, C.DATA_TYPE
, C.CHARACTER_MAXIMUM_LENGTH
, CASE
WHEN C.DATA_TYPE = 'int' THEN '0'
WHEN C.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar')
THEN
CASE
WHEN C.CHARACTER_MAXIMUM_LENGTH <30 then 'UKN'
ELSE 'UnKnown'
END
END 'OUTPUTFROM'
FROM
information_schema.columns C
)
UPDATE
T
SET
T.OUTPUTFROM = X.OUTPUTFROM
FROM
dbo.TABLE T
INNER JOIN
cteX X ON X.TABLE_CATALOG = T.database_name
AND X.TABLE_SCHEMA = T.table_schema
AND X.table_name = T.table_name
AND X.column_name = T.column_name