吃鸡游戏
1. 组装的SQL语句错了:你的语句中将字符串类型跟表类型加到一起了。 2. 表变量的使用方式错误:作用域的问题。 3. 表变量的使用方式不正确:表变量存储方式的问题。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 你的这个SQL语句并没有涉及表变量的其他问题,因此这里就以上几个问题来修正你的代码。 仅修正问题1、2: declare @tb table(byer ntext not null,fare money not null) ------> create table #tb (byer ntext not null,fare money not null) exec (N'insert '+@tb+''+@sqlone) ------> exec (N'insert '+'#tb '+@sqlone) 后面相应的@tb全部改为#tb,即可 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 上面的写法有不少的性能问题,不管是SQL语句本身还是整个方案,包括我上面给出的修改方案。所以,现在考虑修正第3个问题 下面给出一个稍微好一些的写法(注意,方案本身的缺陷只能根据你的实际业务来解决了)整个存储过程可以修改为以下形式: EXEC (N'SELECT SUM(dbo.f_split(byer,'','')) AS number, SUM(fare) AS Totmoney FROM (' + @sqlone + ') AS A') 里面的byer和fare需要你自己再调整,那就看你传入的SQL语句中的字段命名是怎么样的了。 这样修改之后,能够避免一些不必要的性能损失。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 最后补充一点:修改后的方案虽然会比之前的好一些,不过整体方案仍然不是很合理,而且这样的存储过程还会降低应用程序的可维护性。建议在今后的设计中尽量不要使用这样的方案。