动态 SQL "Declare Scalar Variable" 错误
Dynamic SQL "Declare Scalar Variable" error
我创建了以下过程,但每次我尝试执行它时都会收到错误
Must declare the scalar variable @BatchId
本质上,我要做的就是将原始 table 的内容插入到主 table 中,其中包含所有插入行的批次 ID(由排序器创建)。这看起来很简单,但不能正常工作。
CREATE PROCEDURE [dbo].[usp_SessionsAppend]
@RawTable NVARCHAR(500)
AS
DECLARE @BatchId BIGINT, @SQLString NVARCHAR(MAX)
SET @BatchId = NEXT VALUE FOR [dbo].[BatchID]
SET @SQLString =
'INSERT INTO [Master].[Sessions] (
[ImportTimestamp]
,[TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,[BatchId]
)
SELECT
GETDATE() AS [ImportTimeStamp]
,NEWID() AS [TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,@BatchId
FROM' + @RawTable
EXECUTE (@SQLString)
任何帮助或见解将不胜感激。
使用sp_executesql将参数传入动态SQL。
例如
declare @BatchId int = NEXT VALUE FOR [dbo].[BatchID]
declare @RawTable nvarchar(200) = 'foo';
declare @SQLString nvarchar(max) =
'INSERT INTO [Master].[Sessions] (
[ImportTimestamp]
,[TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,[BatchId]
)
SELECT
GETDATE() AS [ImportTimeStamp]
,NEWID() AS [TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,@BatchId
FROM ' + quotename(@RawTable)
print @SQLString
exec sp_executesql @SQLString, N'@BatchId int', @BatchId = @BatchId;
我创建了以下过程,但每次我尝试执行它时都会收到错误
Must declare the scalar variable @BatchId
本质上,我要做的就是将原始 table 的内容插入到主 table 中,其中包含所有插入行的批次 ID(由排序器创建)。这看起来很简单,但不能正常工作。
CREATE PROCEDURE [dbo].[usp_SessionsAppend]
@RawTable NVARCHAR(500)
AS
DECLARE @BatchId BIGINT, @SQLString NVARCHAR(MAX)
SET @BatchId = NEXT VALUE FOR [dbo].[BatchID]
SET @SQLString =
'INSERT INTO [Master].[Sessions] (
[ImportTimestamp]
,[TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,[BatchId]
)
SELECT
GETDATE() AS [ImportTimeStamp]
,NEWID() AS [TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,@BatchId
FROM' + @RawTable
EXECUTE (@SQLString)
任何帮助或见解将不胜感激。
使用sp_executesql将参数传入动态SQL。
例如
declare @BatchId int = NEXT VALUE FOR [dbo].[BatchID]
declare @RawTable nvarchar(200) = 'foo';
declare @SQLString nvarchar(max) =
'INSERT INTO [Master].[Sessions] (
[ImportTimestamp]
,[TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,[BatchId]
)
SELECT
GETDATE() AS [ImportTimeStamp]
,NEWID() AS [TransactionId]
,[ParticpantId]
,[ProviderId]
,[ActivityDate]
,[Attended]
,[Minutes]
,[SurveyCompleted]
,[Instructor]
,[InstructorID]
,[ProgramCode]
,@BatchId
FROM ' + quotename(@RawTable)
print @SQLString
exec sp_executesql @SQLString, N'@BatchId int', @BatchId = @BatchId;