9

SQL データベース内のすべてのテーブルで「Alter Table」を実行したいと思います。

ALTER TABLE test ADD  CONSTRAINT [COLLUM_NAME]  DEFAULT ((0)) FOR [COLLUM_NAME]

データベースから既存のすべてのテーブルを取得する方法を知っています。

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

また

USE DATABASE_NAME
GO 
SELECT name
FROM sys.Tables
GO

しかし、これら2つを組み合わせる方法がわかりません。

私のデータベース (50 以上のテーブル) では、すべてのテーブルに共通の行が 1 つあります。これらすべての行にデフォルト値を設定したいと思います。

4

5 に答える 5

8

コマンドを生成してから実行することができます。次のようなことができます。

SELECT CONCAT("Alter Table `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` this is my default value change on the column") as MySQLCMD 
FROM TABLES 

そして、リトリーブを実行します。

于 2013-04-08T08:50:09.663 に答える
1

これが自動化する必要のない 1 回限りのプロセスである場合は、次のようなものを実行して出力をコピーして貼り付けるよりも悪い結果になる可能性があります。

select 'alter table ' + t.name + ' add constraint ' + c.name + ' default ((0)) for ' + c.name
from    sysobjects t join syscolumns c on c.id = t.id
where   t.xtype = 'U'
于 2013-04-08T08:48:54.460 に答える
0

を設定し'COLUMN NAME'て実行すると、設定された列にデフォルトの制約が追加されます。

DECLARE @sql NVARCHAR(MAX) ;
DECLARE @LINEBREAK AS VARCHAR(2)
SET @LINEBREAK = CHAR(13) + CHAR(10)      

SELECT  @sql = COALESCE(@sql + ';' + @LINEBREAK, '') + 'ALTER TABLE ' 
        + QUOTENAME([TABLES].TABLE_NAME) + ' ADD  CONSTRAINT ' + QUOTENAME([COLUMNS].COLUMN_NAME)
        + ' DEFAULT ((0)) FOR ' + QUOTENAME([COLUMNS].COLUMN_NAME)
FROM    INFORMATION_SCHEMA.TABLES [TABLES]
        INNER JOIN INFORMATION_SCHEMA.COLUMNS AS [COLUMNS] ON [TABLES].TABLE_NAME = [COLUMNS].TABLE_NAME
WHERE   TABLE_TYPE = 'BASE TABLE'
        AND [COLUMNS].[COLUMN_NAME] = 'COLUMN NAME'
PRINT @sql
EXEC sp_executesql @sql
于 2013-04-08T09:25:41.353 に答える
0

使用したい場合INFORMATION_SCHEMA

SELECT 'ALTER TABLE ' +t.TABLE_NAME+ ' ADD  CONSTRAINT '
+c.COLUMN_NAME  +' DEFAULT ((0)) FOR '+c.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.COLUMNS c on t.TABLE_NAME=c.TABLE_NAME
WHERE TABLE_TYPE = 'BASE TABLE'
于 2013-04-08T08:53:43.757 に答える