Asp.net 动态查询显示';字符串';)后未闭合的引号,
我有一个存储过程,在这个过程中,我遇到了一个错误“字符串后未闭合的引号”,这个脚本很难处理。请帮我找出代码中的错误 这是我的密码Asp.net 动态查询显示';字符串';)后未闭合的引号,,asp.net,sql-server,sql-server-2008,Asp.net,Sql Server,Sql Server 2008,我有一个存储过程,在这个过程中,我遇到了一个错误“字符串后未闭合的引号”,这个脚本很难处理。请帮我找出代码中的错误 这是我的密码 ALTER PROCEDURE [dbo].[usp_Transfer] @orgid bigint, @SearchString nvarchar (500) = null, @LocationId bigint = 0, @ownerid bigint, @OrderList varchar(MAX) AS BEGIN -- SET
ALTER PROCEDURE [dbo].[usp_Transfer]
@orgid bigint,
@SearchString nvarchar (500) = null,
@LocationId bigint = 0,
@ownerid bigint,
@OrderList varchar(MAX)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.\
SET NOCOUNT ON;
DECLARE @SQL varchar(MAX)
BEGIN
SET @SQL = 'SELECT ProductID = ii.ProductId,
InvItemId = convert(bigint,0),Name = p.Name,
PrimaryImageID = p.PrimaryImageID,ProductNumberLabel = p.ProductNumberLabel,ProductNumber = p.ProductNumber,
category = isnull(c.Name,''),
qty = ISNULL((SUM(ii.[QuantityOnHand]) - SUM(ii.[QuantitySold])), 0.00),
SalePrice= ISNULL(p.SalePrice, 0.00),
EnteredQuantity=(case when (ISNULL((SUM(ii.[QuantityOnHand]) - SUM(ii.[QuantitySold])), 0.00) > 1) then 1.00 else ISNULL((SUM(ii.[QuantityOnHand]) - SUM(ii.[QuantitySold])), 0.00) end)
,Discount=0,u.UnitName,
u.UnitID
FROM dbo.[Inven] ii
Left Join dbo.[Product] p on ii.ProductId = p.ProductId and p.activestatus=1
Left Join dbo.[category] c on p.DefaultCategoryId = c.CategoryId
Left Join dbo.[Unit] u on p.UnitId=u.UnitId and u.Activestatus=1
WHERE p.OrganizationID = @orgid
AND ii.InventoryID IN(1634)
AND ii.ActiveStatus = 1
AND p.ActiveStatus = 1
AND p.IsDisabled = 0
And p.CanSale = 1
AND ii.InventoryID IN (' + @OrderList + ')
group by ii.ProductId, p.Name, p.PrimaryImageID, p.ProductNumberLabel, p.ProductNumber, c.Name,p.SalePrice,u.unitname,u.UnitID
having ISNULL((SUM(ii.[QuantityOnHand]) - SUM(ii.[QuantitySold])), 0) > 0
Order by p.ProductNumber, p.Name, c.Name '
--EXEC(@SQL)
PRINT(@SQL)
END
END
有两点值得注意
首先,@OrderList
是否包含任何引号
第二,这一行:
...' WHERE p.OrganizationID = @orgid '
应该是:
....'WHERE p.OrganizationID = ' + @orgid + '...'
测试这两者是否是问题的原因的简单方法是将两者都注释掉,运行它并查看它是否有效,如果有效,则一次注释一个,以查看哪一个给了您错误
最后,您可以重写此查询并避免使用动态查询。我想看看这个查询,您之所以这样做是因为('+@OrderList+')子句中的。这些帖子可能会帮助您重做该部分:
有两件事值得注意
首先,@OrderList
是否包含任何引号
第二,这一行:
...' WHERE p.OrganizationID = @orgid '
应该是:
....'WHERE p.OrganizationID = ' + @orgid + '...'
测试这两者是否是问题的原因的简单方法是将两者都注释掉,运行它并查看它是否有效,如果有效,则一次注释一个,以查看哪一个给了您错误
最后,您可以重写此查询并避免使用动态查询。我想看看这个查询,您之所以这样做是因为('+@OrderList+')
子句中的。这些帖子可能会帮助您重做该部分:
按如下方式更新您的SP:
注意:如果解决一个类似引号的问题,声明变量@orgid,然后转换错误,那么会出现很多错误
您的初始错误是由于:category=isnull(c.Name,”)
,请将其替换为category=isnull(c.Name,”)
按以下方式更新您的SP:
注意:如果解决一个类似引号的问题,声明变量@orgid,然后转换错误,那么会出现很多错误
您的初始错误是由于:category=isnull(c.Name,”)
,请将其替换为category=isnull(c.Name,”)
如果解决一个类似引号的问题,声明变量@orgid,然后是转换错误,那么会有很多错误。如果解决一个类似引号的问题,声明变量@orgid,然后是转换错误,那么会有很多错误。我不认为从串联字符串构建SQL算作可靠的建议。OP应该使用参数,这并不难处理,因此没有任何理由不这样做。@Tomalak yeh是的,但我没有建议他这样做,同时我也没有建议他不要这样做。我正在使用提供的代码,只是在有空闲的时候尝试提供一些快速的建议。我将更新一个建议。我不认为从连接字符串构建SQL算作可靠的建议。OP应该使用参数,这并不难处理,因此没有任何理由不这样做。@Tomalak yeh是的,但我没有建议他这样做,同时我也没有建议他不要这样做。我正在使用提供的代码,只是在有空闲的时候尝试提供一些快速的建议。我将提出最新建议。