SELECT C.TABLE_NAME, C.COLUMN_NAME, C.DATA_TYPE, CASE WHEN C.CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN 'STRINGA' WHEN C.NUMERIC_PRECISION IS NOT NULL THEN 'NUMERO' WHEN C.DATETIME_PRECISION IS NOT NULL THEN 'DATA' END FROM INFORMATION_SCHEMA.COLUMNS C WHERE C.IS_NULLABLE = 'YES' AND C.DATA_TYPE NOT LIKE '%bit%' AND C.DATA_TYPE NOT LIKE '%timestamp%' --AND C.TABLE_NAME = 'dev_web_Ordini_tb' ORDER BY C.DATA_TYPE
ALTER PROCEDURE sys_IsNullTable_sp
@tabName AS nvarchar(500)
, @testMode AS bit = 0
AS
BEGIN
-- 2015-06-12 - CREATE PROCEDURE
/**************************************************************************
IMPOSTA I CAMPI NULLI CON VALORI DI DEFAULT:
'' SE E' UN TESTO
0 SE E' UN NUMERO
**************************************************************************/
-- per ora non gestisco i tipi date (che default uso??)
-- nel caso, basta REMmare e SREMmare il codice!
SET NOCOUNT ON
DECLARE @sq as nvarchar(MAX) = ''
SET @tabName = QUOTENAME(@tabName)
DECLARE #cur CURSOR FOR
--SELECT N'UPDATE ' + @tabName + ' SET ' + c.name + ' = '
-- + CASE WHEN t.name LIKE '%char' THEN ''''''
-- --WHEN t.name LIKE '%date%' THEN 'x'
-- ELSE '0'
-- END +
-- ' WHERE ' + c.name + ' IS NULL'
--FROM sys.columns c
-- INNER JOIN sys.types t
-- ON c.user_type_id = t.user_type_id
--WHERE OBJECT_ID = OBJECT_ID(@tabName)
-- AND c.is_nullable = 1
-- AND t.name NOT LIKE '%date%'
SELECT N'UPDATE ' + @tabName + ' SET ' + c.COLUMN_NAME + ' = '
+ CASE
WHEN C.CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN '''''' -- 'STRINGA'
WHEN C.NUMERIC_PRECISION IS NOT NULL THEN '0' -- 'NUMERO'
--WHEN C.DATETIME_PRECISION IS NOT NULL THEN 'DATA'
END
+ ' WHERE ' + c.COLUMN_NAME + ' IS NULL'
FROM INFORMATION_SCHEMA.COLUMNS C
WHERE C.IS_NULLABLE = 'YES'
AND C.DATA_TYPE NOT LIKE '%bit%'
AND C.DATA_TYPE NOT LIKE '%timestamp%'
AND C.DATETIME_PRECISION IS NULL -- esclude le date
AND QUOTENAME(C.TABLE_NAME) = @tabName
OPEN #cur
FETCH NEXT FROM #cur INTO @sq
WHILE @@FETCH_STATUS = 0
BEGIN
IF @testMode = 0
EXEC sp_executesql @sq
ELSE
PRINT @sq
FETCH NEXT FROM #cur INTO @sq
END
CLOSE #cur
DEALLOCATE #cur
END
GO
http://stackoverflow.com/questions/420741/getting-list-of-tables-and-fields-in-each-in-a-database