Есть ХП MS SQL. В этой процедуре, в числе прочего, имеется SELECT, в котором есть обращение к линкованным серверам. Если вызывать эту процедуру из MSSQL, то она работает. Если же ее вызвать через PHP, то нет (то есть не выполняются даже действия, стоящие до SELECT'а; транзакций нет). Проблема исчезает, если в SELECT'е убрать JOIN'ы к таблицам из линкованных серверов. Почему так происходит и как это победить? MS SQL 2008 PHP 5.2.6 [sql] -- Упрощенный кусок ХП SELECT * FROM dbo.Table1 AS R (NOLOCK) INNER JOIN SSERVER.MainDB.dbo.Table2 AS S (NOLOCK) ON R.CR_SkdID = S.Skd_ID WHERE R.CR_ID = @CRID [/sql] PHP: $link = @mssql_connect('MYSERVER', 'login', '****'); $db = @mssql_select_db('MyDatabase', $link); $query = "EXEC dbo.MySP '821131A3-D523-4B42-9EC2-CDBB8F89D403', 18847"; $q = mssql_query($query); die('|'.$q.'|');
Если по входным параметрам все ОК, возможно, не хватает прав. Приведите текст ошибки что ли... Узнать на чем рубится запрос можно: 1) профилированием 2) дебугом (в 2008 из MS VStudio) 3) выводом сообщений принтами или селектами 4) возвратом некоего числа с помощью RETURN Добавьте в код процедуры соответствующие куски, скомпильте процедуру и вызовите ее. Т.е. на первом этапе Вам надо определить, в процедуру заходим или нет (рубится по правам или по другим ошибкам)