Je souhaite parcourir toutes les tables de ma base de données et connaître le type et la longueur de chaque table. Si le type de données est int, je dois insérer 0 dans cette colonne, Si la colonne est Chaîne et la longueur est inférieure à 30, insérez 'UKN' ou Si la colonne est Chaîne et râpe que 30, insérez comme 'Non connu'. Comment écrire un script qui parcourt toutes les tables et les insère dans une base de données en fonction de la condition? Pour la table particulière comment prendre toutes les colonnes et le type de données connexes et vérifier?Parcourez toutes les tables d'une base de données et insérez une ligne basée sur le type de données de la colonne dans SQL Server
-1
A
Répondre
1
Utilisez les tables système:
select t.name as TableName
, c.name as ColumnName
, ty.name as [DataType]
, case when ty.name = 'int' then '0'
when ty.name in ('char', 'nchar', 'varchar', 'nvarchar')
then case when c.max_length <30 then 'UKN'
else 'UnKnown' end
end as OUTPUT
from sys.tables t
inner join sys.columns c on t.object_id = c.object_id
inner join sys.types ty on ty.user_type_id = c.user_type_id
where t.type = 'U'
2
Vous pouvez utiliser information_schema.columns
vue du système, pas besoin de pour redoutée 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
Pour insérer
;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
MIS À JOUR
;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
Comment insérer les valeurs 'OUTPUTFROM' pour ces colonnes de tables? – Pirinthan
S'il vous plaît montrer à quoi ressemble la table qui veut INSÉRER dans –
Vous ne savez pas à quoi ressemble la table, mais j'ai mis à jour la réponse pour montrer les options possibles à INSERT ou UPDATE –