sql - MS SQL 通过查询循环为每个列名定义默认值

标签 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 我想为值 (又名 '' ) 输入一个空白。

现在我知道可以这样做了:

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 多列。

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

最佳答案

这是一种方式

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 多列听起来不太对劲。您可能需要重组您的表格

关于sql - MS SQL 通过查询循环为每个列名定义默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398476/

相关文章:

mysql - 存储带或不带破折号的帐号

mysql - 连接这两个表的方法是什么?

mysql - 带有sql server的bash中的坏循环变量

asp.net - 如何查看 mdf 文件中的数据

sql - 在两个不同的字段中选择具有共享值的行

sql - 如何在SQL中选择接近1的记录?

sql-server - SQL查询对datagridview返回0

sql - 如何在 SQL Server 2012 中创建自定义 View

sql - 如何计算SQL Server 2012中每行的百分比?

sql - 为什么这个索引不能提高查询性能