Правильный синтаксис для развертывания сертификата в проекте базы данных

Как я могу иметь сертификат в проекте базы данных Visual Studio 2010, который будет создаваться, обновляться и удаляться в зависимости от изменений в проекте, аналогично тому, как он обрабатывает таблицы, хранимые процедуры, ключи и другие объекты?

Ниже приведен синтаксис, который я сейчас использую, и файл $(CertName).

CREATE CERTIFICATE [$(CertName)]
    AUTHORIZATION [dbo]
    WITH SUBJECT = N'Encrypt Data', START_DATE = N'11/26/2012 15:13:03', EXPIRY_DATE = N'11/26/2013 15:13:03'
    ACTIVE FOR BEGIN_DIALOG = ON;

Я попытался проверить, существует ли он, используя приведенный ниже оператор if.

IF (select Count(*) from sys.symmetric_keys where name like '$(CertName)') = 0
BEGIN
    --insert create statement
END

Однако, используя этот подход, я получаю следующие ошибки из-за того, что я использую сертификат в определении симметричного ключа.

SQL03006: Симметричный ключ: [$(KeyName)] содержит неразрешенную ссылку на сертификат [$(CertName)].


person Ryan Gates    schedule 06.08.2014    source источник
comment
В качестве обходного пути вы можете порекомендовать использовать развертывание для проекта и не включать сертификат в сборку.   -  person Ryan Gates    schedule 19.08.2014


Ответы (1)


Попробуй это:

IF EXISTS (SELECT 1 FROM sys.certificates where name = '$(CertName)')
person Nelviticus    schedule 09.01.2015