动态SQL错误-将值设置为参数
我有一个动态sql动态SQL错误-将值设置为参数,sql,sql-server,sql-server-2005,dynamic-sql,Sql,Sql Server,Sql Server 2005,Dynamic Sql,我有一个动态sql declare @CustomerId int set @CustomerId = 1 declare @SDate datetime set @SDate = '2015/12/07' declare @ItemId int set @ItemId = 2 declare @QtyS nvarchar(max) declare @QtyOut decimal(18,3) set @QtyS = 'SELECT isnull(sum(d.Qty),0) FROM Inv
declare @CustomerId int
set @CustomerId = 1
declare @SDate datetime
set @SDate = '2015/12/07'
declare @ItemId int
set @ItemId = 2
declare @QtyS nvarchar(max)
declare @QtyOut decimal(18,3)
set @QtyS = 'SELECT isnull(sum(d.Qty),0)
FROM InvoiceDetail AS d INNER JOIN
InvoiceHeader AS h ON d.InvoiceNo = h.InvoiceNo
where
h.CustomerId = '''+@CustomerId+''' and
d.itemmasterid = '''+@ItemId+''' and
h.Deleted = 0 and
h.invoicedate = '''+@SDate+''''
exec sp_executesql @QtyS, N'@Qty decimal(18,3) out', @QtyOut out
select @QtyOut
执行此附加错误时,将发生错误。
错误,作为文本也随此附上。
有什么想法吗
Error:
Msg 245, Level 16, State 1, Procedure rpt_SpecialLaunch, Line 76
Conversion failed when converting the varchar value 'SELECT isnull(sum(d.Qty),0)
FROM InvoiceDetail AS d INNER JOIN
InvoiceHeader AS h ON d.InvoiceNo = h.InvoiceNo
where
h.CustomerId = '' to data type int.
必须声明标量变量“@QtyS” 2005年:
必须声明标量变量“@QtyS” 2005年:
请将错误添加为文本在连接之前将非字符串变量转换为字符串:
'xxx'+cast(@CustomerId as varchar(16))+'xxx'
-您所拥有的可以在行中执行供参考。请将错误添加为文本在连接之前将非字符串变量转换为字符串:'xxx'+cast(@CustomerId as varchar(16))+'xxx'
-您所拥有的可以在线执行,仅供参考。必须声明标量变量“@QtyS”。命令已成功完成。。。syntaxselect@@version中没有任何问题?请提供一个结果,我将检查Microsoft SQL Server 2005-9.00.5000.00(X64)2010年12月10日10:38:40版权所有(c)1988-2005 Windows NT 5.2上的Microsoft Corporation标准版(64位)(构建3790:Service Pack 2)您用2008标记了问题;)好啊5必须声明标量变量“@QtyS”。命令已成功完成。。。syntaxselect@@version中没有任何问题?请提供一个结果,我将检查Microsoft SQL Server 2005-9.00.5000.00(X64)2010年12月10日10:38:40版权所有(c)1988-2005 Windows NT 5.2上的Microsoft Corporation标准版(64位)(构建3790:Service Pack 2)您用2008标记了问题;)好啊5分钟
DECLARE
@CustomerId INT = 1
, @ItemId INT = 2
, @SDate DATETIME = '2015/12/07'
, @QtyS NVARCHAR(MAX)
, @QtyOut DECIMAL(18,3)
SET @QtyS = '
SELECT @QtyOut = SUM(d.Qty)
FROM dbo.InvoiceDetail d
JOIN dbo.InvoiceHeader h ON d.InvoiceNo = h.InvoiceNo
WHERE h.CustomerId = @CustomerId
AND d.itemmasterid = @ItemId
AND h.Deleted = 0
AND h.invoicedate = @SDate'
EXEC sp_executesql @QtyS,
N'@CustomerId INT, @ItemId INT, @SDate DATETIME, @QtyOut decimal(18,3) out',
@CustomerId = @CustomerId, @ItemId = @ItemId, @SDate = @SDate, @QtyOut = @QtyOut OUT
SELECT @QtyOut
DECLARE
@CustomerId INT = 1
, @ItemId INT = 2
, @SDate DATETIME = '2015/12/07'
, @QtyS NVARCHAR(MAX)
, @QtyOut DECIMAL(18,3)
SET @QtyS = '
SELECT @QtyOut = 1
SELECT @CustomerId, @ItemId, @SDate'
EXEC sp_executesql @QtyS,
N'@CustomerId INT, @ItemId INT, @SDate DATETIME, @QtyOut decimal(18,3) out',
@CustomerId = @CustomerId, @ItemId = @ItemId, @SDate = @SDate, @QtyOut = @QtyOut OUT
SELECT @QtyOut
DECLARE
@CustomerId INT
, @ItemId INT
, @SDate DATETIME
, @QtyS NVARCHAR(MAX)
, @QtyOut DECIMAL(18,3)
SELECT
@CustomerId = 1
, @ItemId = 2
, @SDate = '2015/12/07'
SET @QtyS = '
SELECT @QtyOut = SUM(d.Qty)
FROM dbo.InvoiceDetail d
JOIN dbo.InvoiceHeader h ON d.InvoiceNo = h.InvoiceNo
WHERE h.CustomerId = @CustomerId
AND d.itemmasterid = @ItemId
AND h.Deleted = 0
AND h.invoicedate = @SDate'
EXEC sp_executesql @QtyS,
N'@CustomerId INT, @ItemId INT, @SDate DATETIME, @QtyOut DECIMAL(18,3) OUT',
@CustomerId = @CustomerId, @ItemId = @ItemId, @SDate = @SDate, @QtyOut = @QtyOut OUT
SELECT @QtyOut