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)