【发布时间】:2016-12-30 15:16:14
【问题描述】:
嘿,我希望有人有一个可以帮助批量处理的脚本
假设我有一张这样的桌子:
CREATE TABLE [dbo].[Table_3](
[value1] [varchar](50) NOT NULL,
[value2] [varchar](50) NOT NULL,
[value3] [varchar](50) NOT NULL,
[value4] [nchar](10) NOT NULL
) ON [PRIMARY]
我想为 (a.k.a. '' ) 输入一个空白,而不是 NOT NULL。
现在我知道可以这样做:
ALTER TABLE [dbo].[Table_3] ADD CONSTRAINT [DF_Table_3_value1] DEFAULT ('') FOR [value1]
GO
ALTER TABLE [dbo].[Table_3] ADD CONSTRAINT [DF_Table_3_value2] DEFAULT ('') FOR [value2]
GO
etc...
但我不想为每一列手动执行此操作,因为我的一些表有 100 多列。
是否有任何类型的查询会遍历我的所有列并将它们设置为我的默认 ('')?
【问题讨论】:
-
查看游标和动态 SQL。或者,只需在文本编辑器中使用正则表达式替换生成所有语句。
-
这让我想知道你为什么要花这么多时间来避免
NULL值。 -
@GordonLinoff 不是我做的。我拿起一个旧的访问数据库并将其转换为 MS SQL。他们在构建访问数据库方面做得并不好。
-
这可以给你一个想法
SELECT 'ALTER TABLE [dbo].[Table_3] ADD CONSTRAINT [DF_Table_3_'+name+'] DEFAULT ('') FOR ['+name+']' FROM sys.columns WHERE [object_id] = OBJECT_ID('[dbo].[Table_3]'); -
@StealthRT -- 这不是戈登的观点。在 SQL 中,空值是一件好事。如果数据模型有空值而不是空字符串,这将非常有用。因为您不习惯使用空值而替换所有空值让我们担心 - 我们知道在短时间内您会提出一些问题,这些问题可以通过保留空值来解决。
标签: sql sql-server sql-server-2012 ssms sql-server-2014