2017-08-01 84 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

谢谢。万分感激。 :) –