1
我有以下過程將字符串參數傳遞給我,例如,2,3,
。該程序應返回一組行,其中CategoryId
等於2
或3
:無法執行SQL Server存儲過程
CREATE PROCEDURE [dbo].[GetItemListProcedure]
(@CategoriesIdString VARCHAR(1000))
AS
SET NOCOUNT ON;
DECLARE @SQLQuery NVARCHAR(MAX);
SET @SQLQuery = N'SELECT Item.Id, Item.ModelId, Item.ItemCode, Item.CategoryId,
(SELECT TOP (1) Category.CategoryName FROM Category WHERE Category.Id = Item.CategoryId) AS CategoryName
FROM Item
LEFT OUTER JOIN Category ON Item.CategoryId = Category.Id';
IF (@CategoriesIdString IS NOT NULL)
BEGIN
SET @SQLQuery += N' WHERE CHARINDEX('','' + CONVERT(VARCHAR(12), Item.CategoryId) + '','', '' + @CategoriesIdString + '') > 0';
END
DECLARE @ParmDefinition NVARCHAR(600);
SET @ParmDefinition = N'@categoriesId VARCHAR(1000);
PRINT @SQLQuery;
EXEC sp_executesql @SQLQuery, @ParmDefinition, @categoriesId = @CategoriesIdString
RETURN 0
這過程中,由於某種原因,不返回任何記錄。
但是,如果我運行下面的查詢:
DECLARE @CategoriesIdString VARCHAR(1000)
SET @CategoriesIdString = ',2,3,';
SELECT
Item.Id, Item.ModelId, Item.ItemCode, Item.CategoryId,
(SELECT TOP (1) Category.CategoryName
FROM Category
WHERE Category.Id = Item.CategoryId) AS CategoryName
FROM
Item
LEFT OUTER JOIN
Category ON Item.CategoryId = Category.Id
WHERE
CHARINDEX(',' + CONVERT(VARCHAR(12), Item.CategoryId) + ',', @CategoriesIdString) > 0
然後我得到了一些行。
我在存儲過程中做了什麼錯誤?
我也試過這樣:
SET @SQLQuery += N' WHERE CHARINDEX('','' + CONVERT(VARCHAR(12), Item.CategoryId) + '','', @CategoriesIdString) > 0';
但得到一個錯誤:
{"Must declare the scalar variable \"@CategoriesIdString\"."}
做一個「print @sqlquery」來查看執行前查詢的內容。然後,您可以將其複製並粘貼到management studio中,然後直接執行以查看語法錯誤的位置。 – ganders 2015-02-17 20:21:41