maby 이런 식으로 마술을 할 것입니다! 는 SQL 구축에 좋지 들여 쓰기 죄송
DECLARE @TableName AS NVARCHAR(128)
DECLARE @Schema AS NVARCHAR(128)
DECLARE @Modify AS INTEGER
DECLARE @Created AS INTEGER
DECLARE @sql1 as nvarchar(max)
DECLARE @sql2 as nvarchar(max)
DECLARE curs CURSOR FOR
SELECT
A.[name],
S.[name] as schemaname,
(SELECT 1 FROM sys.all_objects innero
where innero.[name] = 'FK_ModifiedBy'
AND innero.parent_object_id = a.[object_id]) as ModifiedBy,
(SELECT 1 FROM sys.all_objects innero
where innero.[name] = 'FK_CreatedBy'
AND innero.parent_object_id = a.[object_id]) as CreatedBy
FROM
sys.all_objects A
INNER JOIN
sys.all_columns O ON
A.[object_id] = O.[object_id]
INNER JOIN
SYS.schemas S ON
A.[schema_id] = S.[schema_id]
WHERE
O.name = 'ModifiedBy'
OPEN curs
FETCH NEXT FROM curs
INTO @TableName, @Schema, @Modify, @Created
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Modify IS NULL
BEGIN
set @sql1 = N'ALTER TABLE ' + @Schema + '.' + @TableName
+ ' ADD CONSTRAINT FK_ModifiedBy FOREIGN KEY (ModifiedBy)
REFERENCES ' + @Schema + '.Users(userid)'
exec SP_EXECUTESQL @sql1
END
IF @Created IS NULL
BEGIN
set @sql2 = N'ALTER TABLE ' + @Schema + '.' + @TableName
+ ' ADD CONSTRAINT FK_CreatedBy FOREIGN KEY (createdby)
REFERENCES ' + @Schema + '.Users(userid)'
exec SP_EXECUTESQL @sql2
END
FETCH NEXT FROM curs
INTO @TableName, @Schema, @Modify, @Created
END
CLOSE curs
DEALLOCATE curs
, 여기가 좋은 수 있도록 조금 성가신 것 같다. 일부 테이블에 다른 두 열 중 하나만있는 경우에는 약간의 조정이 필요합니다.
coldfusion, .net 등의 응용 프로그램을 사용하고 해당 응용 프로그램에 필요한 permuation이있는 경우 테이블 이름 목록을 반복 할 수 있습니다. –
안녕하세요. SQL Server 2008 r2를 사용하고 있습니다. 나는 tbl 이름을 얻을 수있다 : "column_name = 'createdby'와 table_catalog = 'dbtables'....를 information_schema.columns에서 table_name을 선택한다. 그러나 더 진행하려면 hw를 모른다. – Ruby
아니,이 작업을 수행하는 간단한 방법이 없다. - 10 개의 테이블에 외래 키를 추가하려면 10 개의 ALTER TABLE 명령을 사용해야합니다. –