sql报错 必须声明表变量

Create Function GetString(@MainTableName varchar(50),@ReturnList varchar(50),@TargetList varchar(50),@MatchingList varchar(50)) Returns varchar(100) As begin return (SELECT @ReturnList FROM @MainTableName WHERE (@TargetList = @MatchingList)) end 报错信息“消息 1087,级别 15,状态 2,过程 GetString,第 5 行 必须声明表变量 "@MainTableName"。” 问了下同事,了解到错误所在,@MainTableName是文本类型,假设传进来的值是“user”,反应到语句当中就是 SELECT @ReturnList FROM ‘user’,这里明显就错了,如果写明表名,就不会报错,同理WHERE (@TargetList = @MatchingList) 也会出错, 只是在执行的时候不会报错 解决办法:1、写明表名 2、拼凑语句 declare @sql varchar(255) set @sql='select ' + @retStr + '=Content from ' + @strTable+ ' where ID=' +@strID +'and UnitDivis=' + @iUnitDivis + ' order by SerNo' EXEC (@sql)

你可能感兴趣的:(sql)