我有这样的查询:
DECLARE @TaskId UNIQUEIDENTIFIER
DECLARE @TaskName VARCHAR(255) = 'MasterSet'
DECLARE @sql NVARCHAR(MAX)
DECLARE @StartingDateTask DATETIME2 = (SELECT TOP 1 [Date]
FROM [TaskStatusAudit]
WHERE [TaskId] = 'A1FDFC16-904D-4560-B19D-5E7D4FEB1C2B'
AND [TaskStatusName] = 'IN-PROGRESS')
DECLARE @EndingDateTask DATETIME2 = (SELECT TOP 1 [Date]
FROM [TaskStatusAudit]
WHERE [TaskId] = 'A1FDFC16-904D-4560-B19D-5E7D4FEB1C2B'
AND [TaskStatusName] = 'COMPLETED')
SET @sql = N'SELECT dbo.TotalMinuteRange(@StartingDateTask,@EndingDateTask) as ' + quotename(@TaskName) + N''
EXEC sp_executesql @sql
问题是当我执行它时出现此错误:
必须声明标量变量“ @StartingDateTask”。
有什么主意,如果我正确声明了变量为什么会得到它?问候
答案 0 :(得分:3)
在执行sp_executesql时,您需要声明变量并将其传递给sp_executesql之类的东西。
SET @sql = N'SELECT dbo.TotalMinuteRange(@StartingDateTask,@EndingDateTask) as '
+ quotename(@TaskName) + N''
exec sp_executesql @sql
, N'@StartingDateTask DATETIME2 , @EndingDateTask DATETIME2'
, @StartingDateTask
, @EndingDateTask
第二个参数是变量声明参数,后跟实际变量。
答案 1 :(得分:0)
您也可以像接受参数变量一样进行分配。
声明@params nvarchar(100) 设置@params ='@ StartingDateTask DATETIME2,@ EndingDateTask DATETIME2'
SET @sql = N'SELECT dbo.TotalMinuteRange(@ StartingDateTask,@ EndingDateTask)为' + quotename(@TaskName)+ N''
exec sp_executesql @sql ,@params ,@StartingDateTask ,@EndingDateTask