2011-08-31 75 views
3

第一篇文章/問題在這裏。我試圖在PHP訪問標量值函數使用以下查詢:MSSQL標量值函數+ PHP

select *, dbo.fnFunctionName_asArray(AnID,';') as refRes FROM ResourceDB where UniqueID = 'IDgoesHere' 

此查詢運行的MS SQL Server Management Studio中完全正常,但試圖通過運行PHP的查詢,我得到一個可怕的錯誤時。

這裏是PHP代碼本身:

$sql_r = "select *, dbo.fnFunctionName_asArray(AnID,';') as refRes FROM ResourceDB where UniqueID = 'IDgoesHere'"; 
$r_r = mssql_query($sql_r, $msdbc); 

和誤差如下:

警告:mssql_query()[function.mssql-查詢]:消息:選擇失敗因爲 以下SET選項的設置不正確: 'CONCAT_NULL_YIELDS_NULL,ANSI_WARNINGS,ANSI_PADDING'。驗證用於索引視圖和/或 計算列和/或過濾索引和/或查詢通知 和/或XML數據類型方法和/或空間索引操作的索引的SET選項是否正確。 (嚴重性16)

我已經搜索了很多,並且發現了有關存儲過程的信息,但沒有找到MSSQL中的函數。我不知道如何解釋錯誤信息。

在此先感謝。

+2

看起來您正在函數中進行字符串連接,並且某些列具有NULL值,請將COALESCE與CONCAT結合使用。 – Chandu

+0

你有沒有考慮過使用存儲過程?然後,您可以對會話設置(如ANSI_WARNINGS等)進行更多控制。 –

回答

1

錯誤信息是關鍵:

警告:mssql_query()[function.mssql查詢]:消息:選擇失敗 ,因爲下列SET選項的設置不正確: 「CONCAT_NULL_YIELDS_NULL,ANSI_WARNINGS ,ANSI_PADDING'。確認 SET選項對於與索引視圖和/或 計算列和/或過濾索引和/或查詢通知 和/或XML數據類型方法和/或空間索引操作一起使用是正確的。 (嚴重性16)

當試圖使用某些功能時,SQL Server對您的連接設置很挑剔。

您正在使用不同的SSMS和php程序設置連接到SQL Server。他們的默認值必須不同。從SSMS運行這個SQL命令,然後從內部php:

DBCC USEROPTIONS 

它會顯示您的實際設置,這是不同的。嘗試使用這些設置:

SET ANSI_NULLS ON 
SET CURSOR_CLOSE_ON_COMMIT ON 
SET ANSI_NULL_DFLT_ON ON 
SET ANSI_PADDING ON 
SET QUOTED_IDENTIFIER ON 
SET ANSI_WARNINGS ON 
SET ARITHABORT ON 
SET CONCAT_NULL_YIELDS_NULL ON 
SET NUMERIC_ROUNDABORT OFF 
+0

真棒,我是一名非常新手的DBA,但能夠準確理解您在此處演示的內容。我的腳本完美地返回了預期的值。感謝KM! –