Проблема с созданием VIEW внутри хранимой процедуры - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно было проанализировать строку JSON из столбца таблицы SQL Server 2008 R2, поэтому я использовал 2 представления, 3 таблицы и несколько пошаговых запросов. Все работало.

Теперь после заполнения нескольких баз данных мне нужно разрешить размещение триггеров на определенной таблице. Поскольку из триггера можно вызывать только хранимую процедуру, я конвертировал все в хранимую процедуру.

Все прошло хорошо, кроме CREATE VIEW заявления. Я обернул это в EXEC, но я все еще получаю синтаксическую ошибку относительно незакрытой цитаты. Я пробовал несколько разных способов включения ключевых слов, но ничего не получалось.

Вот фрагмент кода:

EXEC ('If object_ID(''vw_BuildLookup01'',''V'') IS NOT NULL
            DROP VIEW vw_BuildLookup01;')
EXEC ('If object_ID(''vw_BuildLookup02'',''V'') IS NOT NULL
            DROP VIEW vw_BuildLookup02;')

EXEC ('CREATE VIEW [dbo].[vw_BuildLookup01]
  AS
  SELECT DISTINCT t.tblKey, t.Name AS MetricTypesName, m.tblKey AS MetricKey, m.Name AS MetricName, 
  m.MetricLimitedValues, f.Value
  FROM  OccurrenceMetricFacts f
  INNER JOIN Metrics m ON f.MetricKey = m.tblKey 
  INNER JOIN MetricTypes t ON m.MetricTypeKey = t.tblKey 
  WHERE  m.MetricLimitedValues IS NOT NULL AND t.DeletedDate IS NULL AND f.Value IS NOT NULL
')

EXEC ('CREATE VIEW [dbo].[vw_BuildLookup02]
  AS
  SELECT v.tblKey, v.MetricTypesName, v.MetricKey, v.MetricName,
  REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(v.MetricLimitedValues, '"Name":"', ''),'","Value"', ''),'{', ''), '}',''),'[', ''), ']', '') AS MetricLimitedValues, v.Value
  FROM vw_BuildLookup01 v
  INNER JOIN MetricTypes t ON t.tblKey = v.tblKey
  WHERE t.DeletedDate IS NULL
')

Синтаксическая ошибка в строке:

CREATE VIEW [dbo].[vw_BuildLookup02] 

после вложенных REPLACE команд «Имя»: «» имеет страшную красную волнистую линию внизу.

1 Ответ

0 голосов
/ 25 апреля 2019

Вот что я сделал с базой данных PUBS в качестве примера.

Так как он выполняет EXEC, весь sql окружен открывающей и закрывающей одинарной кавычкой.

Все внутренние кавычки должны быть ПАРНОЙ ОДНОЙ кавычки.

EXEC ('CREATE VIEW [dbo].[vw_BuildLookup02]
AS
SELECT
        [title_id]
       ,[title]
       ,REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        v.title, ''Name'', ''''),
         ''Value'', ''''),
         ''{'', ''''),
         ''}'', ''''),
         ''['', ''''),
         '']'', '''') 

        AS title2 

    FROM [pubs].[dbo].[titles] as v
    ');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...