1

私のdbスクリプトから以下のステートメントを実行中にエラーが発生しました。

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 '%'.
4

1 に答える 1

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
')
于 2013-08-08T08:56:50.430 に答える