2016-09-21 16 views
0

この手順を実行すると、Incorrect syntax near '0'が返されます。なぜ私は考えていない。'0'付近の構文が正しくありません。 (Microsoft SQL Server)

間違いはMsg 102, Level 15, State 1, Line 43にローカライズされています。何が間違っているのか教えていただけますか?進んでいただきありがとうございます。

CREATE PROCEDURE [dbo].[PV_SaveCategory] 
(
    @AccountID    BIGINT, 
    @LocationID    BIGINT, 
    @CategoryName   NVARCHAR(100), 
    @ParentID    BIGINT, 
    @ExternalCategoryID  BIGINT 
) 
AS 
BEGIN 
DECLARE @ExecSQL NVARCHAR(MAX) 

SET @ExecSQL = N' 
DECLARE @CategoryID INT, @Level INT 
SELECT @CategoryID = Id FROM [DB].[dbo].[Category_' + CONVERT(NVARCHAR, @AccountID, 0) + '] WHERE @ExternalCategoryID = ExternalID 
SELECT @Level = Level+1 FROM [DB].[dbo].[Category_' + CONVERT(NVARCHAR, @AccountID, 0) + '] WHERE @ParentID = Id 

IF @CategoryID IS NULL 
BEGIN 
INSERT 
    INTO [DB].[dbo].[Category_' + CONVERT(NVARCHAR, @AccountID, 0) + '] 
      (
       Name 
       ,LocationID 
       ,IsDeleted 
       ,Level 
       ,ParentCategoryID 
       ,Main 
       ,SubCategory1 
       ,SubCategory2 
       ,SubCategory3 
       ,SubCategory4 
       ,CategoryPath 
       ,ExternalID 
      ) 
      VALUES 
      (
       @CategoryName, 
       @LocationID, 
       0, 
       CASE WHEN @ParentID IS NULL THEN 0 ELSE @Level END, 
       @ParentID, 
       0, 
       1, 
       2, 
       4, 
       ''test'', 
       @ExternalCategoryID 
      ) 
    END 
ELSE 
    BEGIN 
     UPDATE [DB].[dbo].[Category_' + CONVERT(NVARCHAR, @AccountID, 0) + '] SET 
       Level = CASE WHEN @ParentID IS NULL THEN 0 ELSE @Level END, 
       0, 
       1, 
       2, 
       3, 
       4, 
       ''test2'', 
      Where @CategoryID = Id AND @ParentID = ParentCategoryID 
    END' 

    print @ExecSQL 

    EXECUTE sp_executeSQl @ExecSQL, N'@AccountID BIGINT, @LocationID BIGINT, @CategoryName NVARCHAR(100), @ParentID BIGINT, @ExternalCategoryID BIGINT', 
      @AccountID = @AccountID, @LocationID = @LocationID, @CategoryName = @CategoryName, @ParentID = @ParentID, @ExternalCategoryID = @ExternalCategoryID 

END; 
+0

12個のフィールドが挿入コマンドで定義され、11個の値しかありません。 – GuidoG

答えて

3

が欠落しています。

  1. あなたはあなたの中に定義された12個のフィールドを持つコマンドを挿入し、唯一の11の値
  2. 更新ステートメントは、(最初​​のものを除く)

を何列名を持っていない、それは次のようにする必要があります:

UPDATE [DB].[dbo].[Category_' + CONVERT(NVARCHAR, @AccountID, 0) + '] 
SET Level = CASE WHEN @ParentID IS NULL THEN 0 ELSE @Level END, 
    field1 = 0, 
    field2 = 1, 
    field3 = 2, 
    field4 = 3, 
    field5 = 4, 
    field6 = 'test2' 
Where @CategoryID = Id 
AND @ParentID = ParentCategoryID 
+0

はい、そうです。それが理由だった。どうも。 – kenzolek

2

あなたのUPDATE文は、レベルに割り当てる値の後に完了していない他の左側の列名は、私は2つの問題を参照してください

関連する問題