能正常出结果的服务器(Windows2008R2+sql2008R2)执行跟踪:
go
exec sp_executesql N' DELETE FROM 核价单身档 WHERE 核价单号 = ( @P1 )
',N'@P1 varchar(28)','HJ201312040001'
go
exec sp_executesql N' WITH TABLE1 AS ( SELECT 1 阶次 , ( @P1 ) 查询品号 , QAB001 , QAB003 , QAB005 , QAB006 FROM SGMQAB WHERE SGMQAB.QAB001 = ( @P2 ) UNION ALL SELECT T . 阶次 + 1 , ( @P3 ) MAIN , S.QAB001 , S.QAB003 , S.QAB005 , S.QAB006 FROM SGMQAB S JOIN TABLE1 T ON T . QAB003 = S.QAB001 ) INSERT INTO 核价单身档 ( 核价单号 , 品号 , 品名 , 规格 , 最近进价 , 核定用量 ) SELECT ( @P4 ) , TPADEA.DEA001 , TPADEA.DEA002 , TPADEA.DEA057 , isnull ( DGB005 , 0 ) , ( QAB005 / QAB006 )* ( @P5 ) FROM TABLE1 LEFT JOIN TPADEA ON QAB003 = DEA001 LEFT JOIN TPADGB ON DEA001 = DGB002 WHERE DEA009 = ''P''
',N'@P1 varchar(16),@P2 varchar(16),@P3 varchar(16),@P4 varchar(28),@P5 varchar(4)','99102001','99102001','99102001','HJ201312040001','80'
go
不能正常出结果服务器(Windows2003R2+sql2008R2)执行跟踪:
select @p1
go
exec sp_unprepare 73
go
SET NO_BROWSETABLE OFF
go
exec sp_executesql N' DELETE FROM 核价单身档 WHERE 核价单号 = ( @P1 )
',N'@P1 varchar(28)','HJ201312030001'
go
exec [CS]..sp_procedure_params_rowset N'WITH',1,NULL,NULL
go
SET NO_BROWSETABLE ON
go
SET FMTONLY ON exec WITH TABLE1 AS ( SELECT 1 阶次 , ( SET FMTONLY OFF
go
set fmtonly off
go
SET NO_BROWSETABLE OFF
go
exec sp_executesql N'exec WITH TABLE1 AS ( SELECT 1 阶次 , ( @P1 ) 查询品号 , QAB001 , QAB003 , QAB005 , QAB006 FROM SGMQAB WHERE SGMQAB.QAB001 = ( @P2 ) UNION ALL SELECT T . 阶次 + 1 , ( @P3 ) MAIN , S.QAB001 , S.QAB003 , S.QAB005 , S.QAB006 FROM SGMQAB S JOIN TABLE1 T ON T . QAB003 = S.QAB001 ) INSERT INTO 核价单身档 ( 核价单号 , 品号 , 品名 , 规格 , 最近进价 , 核定用量 ) SELECT ( @P4 ) , TPADEA.DEA001 , TPADEA.DEA002 , TPADEA.DEA057 , isnull ( DGB005 , 0 ) , ( QAB005 / QAB006 )* ( @P5 ) FROM TABLE1 LEFT JOIN TPADEA ON QAB003 = DEA001 LEFT JOIN TPADGB ON DEA001 = DGB002 WHERE DEA009 = ''P''
',N'@P1 varchar(16),@P2 varchar(16),@P3 varchar(16),@P4 varchar(28),@P5 varchar(4)','99102001','99102001','99102001','HJ201312030001','80'
go
SET NO_BROWSETABLE ON菜鸟请问请问这二者是什么的区别?为什么在不同服务器的的结果会不一样呢?
go
exec sp_executesql N' DELETE FROM 核价单身档 WHERE 核价单号 = ( @P1 )
',N'@P1 varchar(28)','HJ201312040001'
go
exec sp_executesql N' WITH TABLE1 AS ( SELECT 1 阶次 , ( @P1 ) 查询品号 , QAB001 , QAB003 , QAB005 , QAB006 FROM SGMQAB WHERE SGMQAB.QAB001 = ( @P2 ) UNION ALL SELECT T . 阶次 + 1 , ( @P3 ) MAIN , S.QAB001 , S.QAB003 , S.QAB005 , S.QAB006 FROM SGMQAB S JOIN TABLE1 T ON T . QAB003 = S.QAB001 ) INSERT INTO 核价单身档 ( 核价单号 , 品号 , 品名 , 规格 , 最近进价 , 核定用量 ) SELECT ( @P4 ) , TPADEA.DEA001 , TPADEA.DEA002 , TPADEA.DEA057 , isnull ( DGB005 , 0 ) , ( QAB005 / QAB006 )* ( @P5 ) FROM TABLE1 LEFT JOIN TPADEA ON QAB003 = DEA001 LEFT JOIN TPADGB ON DEA001 = DGB002 WHERE DEA009 = ''P''
',N'@P1 varchar(16),@P2 varchar(16),@P3 varchar(16),@P4 varchar(28),@P5 varchar(4)','99102001','99102001','99102001','HJ201312040001','80'
go
不能正常出结果服务器(Windows2003R2+sql2008R2)执行跟踪:
select @p1
go
exec sp_unprepare 73
go
SET NO_BROWSETABLE OFF
go
exec sp_executesql N' DELETE FROM 核价单身档 WHERE 核价单号 = ( @P1 )
',N'@P1 varchar(28)','HJ201312030001'
go
exec [CS]..sp_procedure_params_rowset N'WITH',1,NULL,NULL
go
SET NO_BROWSETABLE ON
go
SET FMTONLY ON exec WITH TABLE1 AS ( SELECT 1 阶次 , ( SET FMTONLY OFF
go
set fmtonly off
go
SET NO_BROWSETABLE OFF
go
exec sp_executesql N'exec WITH TABLE1 AS ( SELECT 1 阶次 , ( @P1 ) 查询品号 , QAB001 , QAB003 , QAB005 , QAB006 FROM SGMQAB WHERE SGMQAB.QAB001 = ( @P2 ) UNION ALL SELECT T . 阶次 + 1 , ( @P3 ) MAIN , S.QAB001 , S.QAB003 , S.QAB005 , S.QAB006 FROM SGMQAB S JOIN TABLE1 T ON T . QAB003 = S.QAB001 ) INSERT INTO 核价单身档 ( 核价单号 , 品号 , 品名 , 规格 , 最近进价 , 核定用量 ) SELECT ( @P4 ) , TPADEA.DEA001 , TPADEA.DEA002 , TPADEA.DEA057 , isnull ( DGB005 , 0 ) , ( QAB005 / QAB006 )* ( @P5 ) FROM TABLE1 LEFT JOIN TPADEA ON QAB003 = DEA001 LEFT JOIN TPADGB ON DEA001 = DGB002 WHERE DEA009 = ''P''
',N'@P1 varchar(16),@P2 varchar(16),@P3 varchar(16),@P4 varchar(28),@P5 varchar(4)','99102001','99102001','99102001','HJ201312030001','80'
go
SET NO_BROWSETABLE ON菜鸟请问请问这二者是什么的区别?为什么在不同服务器的的结果会不一样呢?
我用SQL跟踪的结果就是二者不同
你的意思是 程序一样,但是经过跟踪,发现 执行的sql代码不一样,是这个意思吗
你的意思是 程序一样,但是经过跟踪,发现 执行的sql代码不一样,是这个意思吗
是的...
你的意思是 程序一样,但是经过跟踪,发现 执行的sql代码不一样,是这个意思吗
是的...对了,你说结果不一样,是报错,还是什么
你的意思是 程序一样,但是经过跟踪,发现 执行的sql代码不一样,是这个意思吗
是的...对了,你说结果不一样,是报错,还是什么
系统没有报错,但没有得到想要的结果.跟没有执行语句是一样
',N'@P1 varchar(16),@P2 varchar(16),@P3 varchar(16),@P4 varchar(28),@P5 varchar(4)','99102001','99102001','99102001','HJ201312030001','80'我把上面这段代码修改成正常的SQL语句后(就是把'参数'用'值'补充进去的),在不正常的服务器上进行执行,可以正常执行,能得到相应的结果.
你的意思是 程序一样,但是经过跟踪,发现 执行的sql代码不一样,是这个意思吗
是的...对了,你说结果不一样,是报错,还是什么
系统没有报错,但没有得到想要的结果.跟没有执行语句是一样我看了一下你贴出来的2次跟踪结果,发现第二次的语句,第一个delete语句是一样的,但是第二个你用的cte递归查询把,在当中就有问题了,你看看:
我觉得这个是有问题的关键
go
SET NO_BROWSETABLE ON
go
SET FMTONLY ON exec WITH TABLE1 AS ( SELECT 1 阶次 , ( SET FMTONLY OFF
go
set fmtonly off
go
SET NO_BROWSETABLE OFF
go
同一个EXE程序,我也在想为什么会多这么一段代码出来???
对,就是语句都不全,很奇怪
是不是服务器的环境有问题?
有可能,如果你确定程序是一样的,也就是程序没问题。那么就更加奇怪了,我刚才查了一下,第2个语句,多出来的部分:SET FMTONLY ON 解释:
当 SET FMTONLY 为 ON 时,将不对行进行处理,也不将行作为请求的结果发送到客户端。
是的,确定同一个EXE程序,