以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  sql中的自定义函数生成的表在ft中如何调用  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92301)

--  作者:happyft
--  发布时间:2016/10/31 14:43:00
--  sql中的自定义函数生成的表在ft中如何调用
如果SQL数据库中有一个自定义的函数名称为:Ufn_Myquerytable,执行结果是得到一个查询表
在foxtable中要如何调用这个表,如下吗?
Dim cmd As New SQLCommand 

   cmd.Connection Name = "数据源"  

 c cmd.CommandText = "Exec Ufn_Myquerytable"

   Dim t As DataTable = cmd.ExecuteReader


如如果函数有参数又要怎么写?

谢谢谢!




--  作者:有点蓝
--  发布时间:2016/10/31 15:50:00
--  
cmd.CommandText = "select Ufn_Myquerytable(\'参数1\',\'参数2\')"
--  作者:HappyFt
--  发布时间:2016/11/6 22:04:00
--  
如果在sql数据库中的sql语句中引用了变量总提示出错,如下:
declare @dateflt nvarchar(100)
IF @dateEnd = \'\'
SET @dateflt = \'进出日期 > \' + @datePd
ELSE 
SET @dateflt = \'进出日期 >\' + @datePd + \' AND 进出日期 <\' + @dateEnd

BEGIN
  s elect * from 库存表
  where 仓库 = \'成品仓\' and \' + @dateflt + \' 
END
就想sql语句根据dateflt变量查询出不同的数据,但上面的红色部份不知怎么写,总提示:
“在应使用条件的上下文(在 \'group\' 附近)中指定了非布尔类型的表达式。”
请问要如何写,谢谢!




--  作者:菲舍尔
--  发布时间:2016/11/7 1:28:00
--  
多了‘ ’
--  作者:有点青
--  发布时间:2016/11/7 8:52:00
--  

 不能直接执行拼接的sql语句的,要用exec函数执行以下,参考

 

http://www.cnblogs.com/ecosu/p/4399020.html

 


--  作者:HappyFt
--  发布时间:2016/11/7 13:38:00
--  
关键是这个sql语句前面还有其他语句用left join与它相联啊,
BEGIN
 s elect * from 出库单 where 出库单号 = \'abc-001\'
left join
  exec(s elect * from 库存表 where 仓库 = \'成品仓\' and \' + @dateflt + \')
END
这样写也不对,这种变量 如:@dateflt = \'进出日期 >\' + @datePd + \' AND 进出日期 <\' + @dateEnd
应该如何加入到第二个sql语句中的where条件中?

--  作者:有点蓝
--  发布时间:2016/11/7 14:37:00
--  
exec( \'select * from 库存表 where 仓库 = \'\'成品仓\'\' and \' + @dateflt )

--  作者:HappyFt
--  发布时间:2016/11/7 18:18:00
--  
实际的SQL如下 ,但怎么写都报错啊,
LEFT JOIN
EXEC(\'s elect 产品编码,工序号,仓库,isnull(sum(入库数量),0) as 本期入库,isnull(sum(出库数量),0) as 本期出库,isnull(sum(进出数量),0) as 本期变动 from Stockinout 
where 进出类别 <> "盘点" and 品质状态 <> "未判定" AND 仓库 = \' +@ck+ \' and \'+ @datePd + \' group by 产品编码,工序号,仓库\') d
on c.产品编码 = d.产品编码 and c.工序号 = d.工序号 and c.仓库  = d.仓库

@ck是一个传入参数,@dtatPd是前面的sql语句定义的字符串变量是一个表达式。
关键字 \'EXEC\' 附近有语法错误。
消息 156,级别 15,状态 1,过程 tj_inoutstock,第 25 行
关键字 \'LEFT\' 附近有语法错误。

--  作者:有点色
--  发布时间:2016/11/7 18:55:00
--  

不断,简化你的语句,调试错误。

 

EXEC("s elect 产品编码,工序号,仓库,isnull(sum(入库数量),0) as 本期入库,isnull(sum(出库数量),0) as 本期出库,isnull(sum(进出数量),0) as 本期变动 from Stockinout 

where 进出类别 <> \'盘点\' and 品质状态 <> \'未判定\' AND 仓库 = \'" +@ck+ "\' and \'"+ @datePd + "\' group by 产品编码,工序号,仓库) d
on c.产品编码 = d.产品编码 and c.工序号 = d.工序号 and c.仓库  = d.仓库")

--  作者:HappyFt
--  发布时间:2016/11/7 19:36:00
--  
谢谢!那样更不正确,出错提示更多了。