2016-09-29 11 views
0

作成ビュー内でsqlcmdモードvarsを使用しようとしていますが、これはできませんか?CREATE VIEW内のSQLCMDモードと変数

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[newTaxonomyMatterTypeId]')) 
Drop view newTaxonomyMatterTypeId; 
go 
-- Create a view that has all of practice areas and all of Matters within the practice area using the new Taxonomy table 
Create View NewTaxonomyMatterTypeId as (
select p.PracticeAreaId As NewPracticeAreaId, p.PracticeAreaEn, mt.MatterTypeId As NewMatterTypeId, mt.MatterTypeEn 
    from [$(Taxonomy_DB)].dbo.PracticeAreas p 
    inner join [$(Taxonomy_DB)].dbo.MatterTypes mt on p.PracticeAreaId = mt.PracticeAreaID 
    ) 
Go 

助言してください。

おかげで、 KS

+0

なぜ変数の代わりに実際のdb名を使用しないのですか? –

+0

変数が便利です。たとえば、本番環境では、データベースBを別のサーバーに移動し、元のサーバー上のデータベースAからビュー/プロシージャを使用することができます。一方、開発では、それらは同じサーバー上にあります。開発のためにデータベース名をハードコードすると、本番環境でのデータベースAの更新が非常に困難になります。 –

答えて

0

はい、これが可能です。あなたはとにかくTaxonomy_DB変数を設定しているようには見えません。

:setvar Taxonomy_DB yourDbName 
:r "c:\temp\yourview.sql" 
:まず第一に、あなたのSSMSはSQLCMDモード(クエリ> SQLCMDモード)であることを確認し、その後、例えば同じスクリプトまたは呼び出し元のスクリプトのいずれかで setvarを使用して、変数、

:setvar Taxonomy_DB yourDbName 
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[newTaxonomyMatterTypeId]')) 
Drop view newTaxonomyMatterTypeId; 
go 
-- Create a view that has all of practice areas and all of Matters within the practice area using the new Taxonomy table 
Create View NewTaxonomyMatterTypeId as (
select p.PracticeAreaId As NewPracticeAreaId, p.PracticeAreaEn, mt.MatterTypeId As NewMatterTypeId, mt.MatterTypeEn 
    from [$(Taxonomy_DB)].dbo.PracticeAreas p 
    inner join [$(Taxonomy_DB)].dbo.MatterTypes mt on p.PracticeAreaId = mt.PracticeAreaID 
    ) 
Go 

かを設定します

sqlcmd.exe-vスイッチを使用する場合はsqlcmd変数を設定することも、Visual Studioデータベースプロジェクトがこれを処理するようにすることもできます。

関連する問題