TSQL在PHP和SSManagement Studio中执行不同的结果

时间:2012-10-22 10:42:21

标签: php sql-server sql-server-2012

我正在从PHP和SSManagement Studio查询MSSQL过程,结果有所不同?

此查询从表中获取以tKey开头的字段。两列tKey1和tKey2存在

程序sp_myProc

DECLARE @tKeys VARCHAR(100);

SELECT @tKeys = ISNULL(@tKeys + ',', '') + column_name
FROM   testweberp.INFORMATION_SCHEMA.columns
WHERE  table_name = myTable
       AND LEFT(column_name, 4) = 'tKey'
ORDER  BY ordinal_position;

SELECT @tKeys 

当我从SSMS执行查询时,exec sp_myProc,我得到结果:tKey1,tKey2

当我从php mssql_query("exec sp_myProc",$link)执行查询时,我得到了结果:,tKey1,tKey2

是的,发送给php的结果中有一个额外的逗号 并且它不是由php生成的,因为如果不是@tKeys,我会返回len(@tKeys),它在SSMS中是11而在php中是12吗?

1 个答案:

答案 0 :(得分:5)

似乎SET CONCAT_NULL_YIELDS_NULL可能是罪魁祸首。

在我的某个数据库上使用类似的查询不会返回SET CONCAT_NULL_YIELDS_NULL ON的前导逗号和SET CONCAT_NULL_YIELDS_NULL OFF的前导逗号。

请注意(来自MSDN)

  

SET CONCAT_NULL_YIELDS_NULL的设置在执行或运行时设置,而不是在分析时设置。