SSDTデータベースプロジェクトには、顧客の要件に応じて、いくつかの形式のいずれかをとることができる計算列を持つテーブルが含まれています。この計算列を管理して、全員の列をデフォルトに戻さなくても発行機能を使用できるようにする方法を見つけようとしています。
私が達成しようとしていることは、次の無効なT-SQLコードで説明できます。
CREATE TABLE dbo.Customer
(
Id INTEGER,
Region INTEGER,
Name VARCHAR(50),
AccountNumber AS dbo.FormatAccountNumber(Id, Region)
)
CREATE FUNCTION [dbo].[FormatAccountNumber]
(
@Id INTEGER,
@Region INTEGER
)
RETURNS VARCHAR(20)
AS
BEGIN
IF '$(AccountType)' = 'Regional'
RETURN CONVERT(VARCHAR, @Region) + '-' + CONVERT(VARCHAR, @Id)
IF '$(AccountType)' = 'Merged'
RETURN CONVERT(VARCHAR, @Region * 100000 + @Id)
IF '$(AccountType)' = 'Flat'
RETURN CONVERT(VARCHAR, @Id)
END
もちろん、これは、$(AccountType)
SQLCMD変数を関数内で使用できず、実行時に適切に設定されないため、機能しません。また、関数全体にSQLCMDを条件付きで配置しようとしました。
IF '$(AccountType)' = 'Flat'
CREATE FUNCTION ...
ただし、これにより、「CREATEFUNCTIONはバッチ内の唯一のステートメントである必要があります」というエラーが発生します。
SSDTプロジェクトでスキーマの条件付きコンパイルを行う方法はありますか?そうでない場合は、SSDT公開プロセス内でこの種のカスタマイズ可能なフィールドを維持するためにどのようなオプションがありますか?