この手順を実行すると、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;
12個のフィールドが挿入コマンドで定義され、11個の値しかありません。 – GuidoG