MS SQL通过查询循环

时间:2016-12-30 15:16:14

标签: sql sql-server sql-server-2012 ssms sql-server-2014

嘿所有我希望有人有一个帮助批量的脚本

说我有一张这样的表:

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...

但我不想为每列手动执行此操作,因为我的某些表有100多列。

是否有任何类型的查询会遍历我的所有列并将其设置为默认值('')

2 个答案:

答案 0 :(得分:7)

这是一种方式

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) 

表格中有100多列并不合适。您可能需要重组表格

答案 1 :(得分:0)

此脚本应该可以使用

 select 'alter table TABLE add constraint DF_TABLE_' 
         + name  + ' DEFAULT ('''') FOR ' + name  
 from sys.columns 
 where object_id = object_id('TABLE')