MS SQL 通过查询循环为每个列名定义默认值
MS SQL define default value for each column name via query loop
嘿,我希望有人有一个可以帮助批量处理的脚本
假设我有一个 table 像这样:
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]
而不是 NOT NULL 我想为值 (a.k.a. '' ) 输入一个空白.
现在我知道可以这样做了:
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...
但我不想为 每一列 手动执行此操作,因为我的一些 table 有 100 多列。
是否有任何类型的查询会遍历我的所有列并将它们设置为我的默认值 ('')?
这是一种方法
DECLARE @tblName VARCHAR(MAX)
DECLARE @SQL VARCHAR(MAX)
SET @tblName = 'Table_3'
SET @SQL = (SELECT 'ALTER TABLE [dbo].[' + @tblName + '] ADD CONSTRAINT [DF_' + @tblName + '_'
+ COLUMN_NAME + '] DEFAULT ('''') FOR '
+ Quotename(COLUMN_NAME) + '; '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName
AND COLUMN_NAME LIKE 'value%'
AND IS_NULLABLE = 'NO'
FOR XML PATH(''))
--PRINT @SQL
EXEC (@SQL)
在 table 中包含 100 多列听起来不对。您可能需要重组您的 table
这个脚本应该可以工作
select 'alter table TABLE add constraint DF_TABLE_'
+ name + ' DEFAULT ('''') FOR ' + name
from sys.columns
where object_id = object_id('TABLE')
嘿,我希望有人有一个可以帮助批量处理的脚本
假设我有一个 table 像这样:
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]
而不是 NOT NULL 我想为值 (a.k.a. '' ) 输入一个空白.
现在我知道可以这样做了:
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...
但我不想为 每一列 手动执行此操作,因为我的一些 table 有 100 多列。
是否有任何类型的查询会遍历我的所有列并将它们设置为我的默认值 ('')?
这是一种方法
DECLARE @tblName VARCHAR(MAX)
DECLARE @SQL VARCHAR(MAX)
SET @tblName = 'Table_3'
SET @SQL = (SELECT 'ALTER TABLE [dbo].[' + @tblName + '] ADD CONSTRAINT [DF_' + @tblName + '_'
+ COLUMN_NAME + '] DEFAULT ('''') FOR '
+ Quotename(COLUMN_NAME) + '; '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName
AND COLUMN_NAME LIKE 'value%'
AND IS_NULLABLE = 'NO'
FOR XML PATH(''))
--PRINT @SQL
EXEC (@SQL)
在 table 中包含 100 多列听起来不对。您可能需要重组您的 table
这个脚本应该可以工作
select 'alter table TABLE add constraint DF_TABLE_'
+ name + ' DEFAULT ('''') FOR ' + name
from sys.columns
where object_id = object_id('TABLE')