我正在开发 sql 2012服务器快速版。
我想将默认值分配给所有用户数据库中所有表的所有列。
- 所有numeric,int,smallint,tinyint等0默认值
- 所有与日期相关的字段' 01-jan-1900'默认值
- 所有字符字段(Varchar等)''默认值
- 所有逻辑字段0默认值
醇>
我不想和桌面设计师一起做。如何使用命令或存储过程执行此操作。
不要为主键字段和自动增量字段(标识列)设置此默认值。
我是SQL编程的新手,并且我一直都要关注NULL值,而对于我的工作,NULL除了默认值之外没有任何意义。它将针对所有现有表格进行。
答案 0 :(得分:0)
您可以为每个数据库尝试这样的解决方案:
DECLARE @SQL nvarchar(max) = ''
SELECT
@SQL = @SQL +
'UPDATE [' + s.name + '].[' + o.name + '] SET [' + c.name + '] = ' +
CASE
WHEN t.name IN ('int', 'bigint', 'bit', 'decimal', 'money', 'numeric', 'smallint', 'smallmoney', 'tinyint', 'float', 'real') THEN '0'
WHEN t.name IN ('char', 'varchar', 'text') THEN ''''''
WHEN t.name IN ('nchar', 'nvarchar', 'ntext') THEN 'N'''''
WHEN t.name IN ('date', 'datetime', 'datetime2', 'datetimeoffset', 'smalldatetime', 'time') THEN 'CAST(''1900-01-01'' AS ' + t.name + ')'
ELSE '0'
END +
' WHERE [' + c.name + '] IS NULL; '
FROM
sys.schemas s
INNER JOIN
sys.objects o ON s.[schema_id] = o.[schema_id]
INNER JOIN
sys.columns c ON o.[object_id] = c.[object_id]
INNER JOIN
sys.types t ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
WHERE
o.[type] = 'U'
AND
c.is_identity <> 1
-- If you want to apply it to only one table use this:
AND
o.name = 'yourTable'
EXEC(@SQL)