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

O V*_*'Ho 2 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 
Run Code Online (Sandbox Code Playgroud)

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

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

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

dev*_*vio 5

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

在我的一个数据库上使用类似的查询返回没有前导逗号SET CONCAT_NULL_YIELDS_NULL ON,以及一个前导逗号SET CONCAT_NULL_YIELDS_NULL OFF.

请注意(来自MSDN)

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