【问题标题】:VS 2013 Database Project - Populating Standing DataVS 2013 数据库项目 - 填充常规数据
【发布时间】:2015-12-10 11:24:56
【问题描述】:

我有几个在部署后运行的合并脚本,其中一个按照以下方式设置查找表:

MERGE INTO [Languages] AS Target
USING (VALUES
   ('English','eng','en')
  ,('French','fra','fr')
) AS Source ([LanguageName],[Iso639Code],[Locale])
ON (Target.[Iso639Code] = Source.[Iso639Code])
WHEN MATCHED THEN
 UPDATE SET 
  [LanguageName] = Source.[LanguageName], 
  [Locale] = Source.[Locale],
  [UserModified] = @UpdatedBy,
  [ModifiedDateTime] = GETDATE()
WHEN NOT MATCHED BY TARGET THEN
 INSERT([LanguageName],[Iso639Code],[Locale],[UserCreate],[CreateDateTime])
 VALUES(Source.[LanguageName],Source.[Iso639Code],Source.[Locale],@UpdatedBy,GETDATE());
GO

这个表有一个 [int] 作为主键。这个脚本运行良好。

所以我的问题是我现在有另一个脚本需要从该表中查找主键以插入到第二个表中。

MERGE INTO [Countries] AS Target
USING (VALUES
   ('England')
  ,('France')
) AS Source ([CountryName])
ON (Target.[CountryName] = Source.[CountryName])
WHEN MATCHED THEN
 UPDATE SET 
  [CountryName] = Source.[CountryName], 
  [LanguageId] = (Select LanguageID from [Languages] where [LanguageName] = Source.[LanguageName]),
  [Locale] = Source.[Locale],
  [UserModified] = @UpdatedBy,
  [ModifiedDateTime] = GETDATE()
WHEN NOT MATCHED BY TARGET THEN
 INSERT([CountryName],LanguageId,[UserCreate],[CreateDateTime])
 VALUES(Source.[CountryName],(Select LanguageID from [Languages] where [LanguageName] = Source.[LanguageName]),@UpdatedBy,GETDATE());
GO

这是将两个表与部署后脚本链接的正确过程吗?

【问题讨论】:

    标签: sql sql-server deployment merge


    【解决方案1】:

    玩过,是的,我所展示的正是我所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多