如果是外部输入的动态语句,在调用 exec sp_executesql 前,需要另外设置一个参数:@vistInfo2 --DROP PROCEDURE getVisitedRecordsets --ALTER PROCEDURE getVisitedRecordsets Create Proc getVisitedRecordsets @vistInfo varchar(4000), @listCount int As begin Declare @vistInfoStr nvarchar(4000),@vistInfo2 nvarchar(4000); SET @vistInfo2 = @vistInfo exec sp_executesql @vistInfo2,N'@vistInfoStr nvarchar(4000) output ',@vistInfoStr output print @vistInfoStr end Go Exec getVisitedRecordsets 'select @vistInfoStr = user_fangwenuserid from userdb where user_id = 8223',2 如果是直接使用内部动态语句,则需要在语句前加 N --DROP PROCEDURE getVisitedRecordsets ALTER PROCEDURE getVisitedRecordsets --Create Proc getVisitedRecordsets @vistInfo varchar(4000), @listCount int As begin Declare @vistInfoStr nvarchar(4000) exec sp_executesql N'select @vistInfoStr = user_fangwenuserid from userdb where user_id = 8223',N'@vistInfoStr nvarchar(4000) output ',@vistInfoStr output print @vistInfoStr end Go Exec getVisitedRecordsets '无用参数',2