2013-08-08 4 views
1

Я получаю ошибку при выполнении инструкции ниже из моего сценария db.Ошибка создания схемы SQL

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PROJ_GetQuestions]') AND type in (N'P', N'PC')) 
BEGIN 
EXEC(' 
CREATE PROCEDURE [dbo].[PROJ_GetQuestions] 
       (
        @TestID INTEGER 
      ) 
       AS    
      SELECT b.* FROM [IER_TestsCatalogue] a 
      INNER JOIN [IER_QuestionsCatalogue] b 
      ON ',' + a.Selected_CategoryIds + ',' LIKE '%,' + CAST(Category_Id AS VARCHAR(10)) + ',%' 
      WHERE a.Test_Id = @TestID Order by NEWID()    
     RETURN 
') 
END 

Ошибка после выполнения вышеуказанного заявления.

Schema Creation Failed: Incorrect syntax near '%'. 
+1

Вам нужно '' ''избежать' '' внутри строки. –

+0

Все еще получая ошибку, я заменил «на» –

ответ

1

Вы можете сделать это с гораздо проще exec использованием alter procedure, как:

if not exists (select * from sys.procedures where name = 'PROJ_GetQuestions') 
    exec ('create procedure dbo.PROJ_GetQuestions as select 1') 
go 
alter procedure dbo.PROJ_GetQuestions(
    @TestID int) 
as 
    ... body of stored procedure ... 
go 

Если вы должны написать его с помощью create procedure, вот версия с правильным цитатой побега:

EXEC(' 
CREATE PROCEDURE [dbo].[PROJ_GetQuestions] 
       (
        @TestID INTEGER 
      ) 
       AS    
      SELECT b.* FROM [IER_TestsCatalogue] a 
      INNER JOIN [IER_QuestionsCatalogue] b 
      ON '','' + a.Selected_CategoryIds + '','' LIKE ''%,'' + 
       CAST(Category_Id AS VARCHAR(10)) + '',%'' 
      WHERE a.Test_Id = @TestID Order by NEWID()    
     RETURN 
') 
+0

Ошибка: неправильный синтаксис рядом с «CAST». –

+0

Попробуйте еще раз? Раньше версия имела неуместную цитату. – Andomar

+0

Спасибо .. Это сработало –

Смежные вопросы