2017-08-01 87 views
-2

我有這個字符串在PHP中:VARCHAR在SQL IN子句的參數存儲過程

$temp = 'one, two, three, four, five, six'; 

我所說的SQL服務器這樣的存儲過程:

$tsql_callSP = "{call spThisIsCalled($temp)}"; 

我有以下的SQL Server中的存儲過程有太多的問題,我不知道:

CREATE PROC spThisIsCalled(
    @serverVar VARCHAR(100) 
) 
AS 
BEGIN 
    SELECT Something, @serverVar 
    FROM ( ............. 
      WHERE 
       (........ IN 
       ([@serverVar])) 
       AS PVT; 
END 

@serverVar in the存儲過程是列名稱,但不知何故,由於某些問題,它不工作。請幫忙。

+0

當您從PHP調用存儲過程時,是否設置了@ @ ServerVar? –

+1

SQL Server不支持宏替換。您需要爲此使用一些DYNAMIC SQL –

+0

您不能使用變量來指定列名稱。如果要將列名指定爲參數,則需要構建動態SQL。 – pmbAustin

回答

0

我覺得這是不可能的。你可以嘗試將所有的代碼移動到一個變量然後執行,有些東西就像

CREATE PROC spThisIsCalled(
    @serverVar VARCHAR(100) 
) 
AS 
BEGIN 

declare @sqlCommand varchar(max) = 
'SELECT Something, ' + @serverVar + ' FROM ( ............. 
      WHERE 
       (........ IN 
       (' + @serverVar + ' ]))AS PVT; ' ; 

EXEC SP_EXECUTESQL @sqlCommand 
End 
+0

感謝您的回覆。我不確定你爲什麼在SELECT前面和@serverVar後面包括'N'。請幫忙。 –

+0

您不需要使用'N',因爲您正在使用varchar數據類型。我編輯了代碼。 –

+0

謝謝。萬分感激。 :) –