Foxtable(狐表)用户栏目专家坐堂 → 拼接了一个sql语句如何传递到储存过程中生成临时表?


  共有3176人关注过本帖树形打印复制链接

主题:拼接了一个sql语句如何传递到储存过程中生成临时表?

帅哥哟,离线,有人找我吗?
HappyFt
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/19 18:11:00 [只看该作者]

那就用个真实的表名,反正每次用完都删除掉,这样反反复复在数据库上新增表,又删除没关系吧,因为每执行一次就要生成删除一次.

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/19 20:41:00 [只看该作者]

直接返回不行么,为什么要用临时表


CREATE PROCEDURE [dbo].[usp_Updatetb]
(
     @sqltb NVARCHAR(800)
)
As
BEGIN
  DE CLARE @sql NVARCHAR(MAX);
  SE T @sql = 'SE LECT *  FROM (' + @sqltb + ') as a'
  EXEC sp_executesql @sql
End

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/20 12:22:00 [只看该作者]

用临时表是因为储存过程中后面还要用这个临时表连接很多其他的表更新数据用,
已经解决了,就是用全局临时表就没有问题。

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/20 18:28:00 [只看该作者]

新的问题,在前台执行储存过程时没有结果输出 ,也没有错误提示,问题出在哪里?
Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
Dim sql As String 
sql = " 'Se lect ''ZL1703-636'' as 来源单号,''B2601146'' as 产品编码,1000 as 数量 union all Se lect ''ZL1703-637'' as 来源单号,''B2601147'' as 产品编码,100 as 数量 ' "
cmd.CommandText = "Exec usp_tbover " & Sql
Dim dt As DataTable =  cmd.ExecuteReader
output.show(dt.DataRows.count)  命令窗口执行显示为0,实际上有两行数据
Tables("供应商_主表").DataSource  = dt

但同样的语句在sql的后台数据库测试又可以

图片点击可在新窗口打开查看此主题相关图片如下:截图20170520318935.png
图片点击可在新窗口打开查看

是不是因为储存过程传递参数时多个参数是用,号隔开,但我的拼接的sql语句中有多个,号在中间,但实际整句sql就是一个参数而已,传入的这个sql语句的正确格式应该怎样写才是?

谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/22 8:24:00 [只看该作者]

有点色老师,这个帮忙看下,昨天弄了一天,都没有找到原因,看楼上,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/22 8:56:00 [只看该作者]

存储过程加上 select @strsql,然后在数据库执行这个存储过程,看拼凑成的sql是怎么样的

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 9:11:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/22 10:23:00 [只看该作者]

果然是加上set nocount on/off就可以了,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/22 12:05:00 [只看该作者]

在命令窗口测试也没有问题,结果在实际的程序中与其他事务一起执行是会出错,如下


System.Data.OleDb.OleDbException: 关键字 'As' 附近有语法错误。

   System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)

   System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

   Foxtable.SQLCommand.ExecuteNonQuery2()

   Foxtable.SQLCommand.ExecuteNonQuery()

   UserCode.ARotfDlds8PApPDEb(Object[] Args)


这个是什么意思?


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 12:08:00 [只看该作者]

 弹出你合成的sql语句看看。提示就是你的语句错误。

 回到顶部
总数 23 上一页 1 2 3 下一页