【发布时间】:2015-12-25 16:06:13
【问题描述】:
我想动态调用存储过程,因为我的过程名称存储在某个地方,我还需要将该过程的结果存储到表变量中。因此我不得不编写以下sql代码,
在下面的代码中 @tblEmailIds 是我要存储 SP 的结果的表变量 @tempEmailSource 是过程的名称 @tempRecipientsIdsCSV 是我的 SP 接受的第一个参数 @ObjectMasterId 是 SP 接受的第二个参数(可选)
DECLARE @tempTypeName NVARCHAR(100),
@tempTypeId INT,
@tempEmailSource NVARCHAR(100),
@tempRecipientsIdsCSV NVARCHAR(MAX),
@tempIsObjectSpecific BIT,
@sqlQuery NVARCHAR(MAX) = 'INSERT INTO @tblEmailIds '
SELECT TOP 1 @tempTypeName = NAME,
@tempTypeId = Id,
@tempEmailSource = EmailListSourceName
FROM @tbleRecipientsTypes WHERE IsEmailIdsFetched = 0
SELECT @tempRecipientsIdsCSV = SUBSTRING(
(SELECT ',' + CAST(RT.EmailRecipientId AS NVARCHAR(50))
FROM @tbleRecipientsTypes RT WHERE RT.Id = @tempTypeId
ORDER BY RT.EmailRecipientId
FOR XML PATH('')),2,200000)
SELECT @tempRecipientsIdsCSV
SET @sqlQuery = @sqlQuery + 'EXEC ' + @tempEmailSource +' ' +'''' + @tempRecipientsIdsCSV +''''
IF (@tempIsObjectSpecific = 1)
BEGIN
SET @sqlQuery = @sqlQuery + ' ' + @ObjectMasterId
END
PRINT @SQLQUERY
EXECUTE SP_EXECUTESQL
@SqlQuery,'@IdsCSV NVARCHAR(MAX) OUTPUT,
@ObjectMasterId INT = NULL OUTPUT', @tblEmailIds
我收到以下错误
消息 214,级别 16,状态 3,过程 sp_executesql,第 6 行过程 需要类型为“ntext/nchar/nvarchar”的参数“@params”。
【问题讨论】:
标签: sql-server stored-procedures dynamic-sql