如何在SQL值中传递连接字符串

如何在SQL值中传递连接字符串,sql,select,Sql,Select,如何将连接字符串传递到SQL SELECT IN中 DECLARE @NextString NVARCHAR(40) DECLARE @Pos INT DECLARE @NextPos INT DECLARE @String NVARCHAR(40) DECLARE @Delimiter NVARCHAR(40) SET @String ='1,2' SET @Delimiter = ',' SET @String = @String + @Delimiter SET @Pos = chari

如何将连接字符串传递到SQL SELECT IN中

DECLARE @NextString NVARCHAR(40)
DECLARE @Pos INT
DECLARE @NextPos INT
DECLARE @String NVARCHAR(40)
DECLARE @Delimiter NVARCHAR(40)

SET @String ='1,2'
SET @Delimiter = ','
SET @String = @String + @Delimiter
SET @Pos = charindex(@Delimiter,@String)

WHILE (@pos <> 0)
BEGIN
SET @NextString = substring(@String,1,@Pos - 1)
SELECT @NextString -- Show Results
SET @String = substring(@String,@pos+1,len(@String))
SET @pos = charindex(@Delimiter,@String)

SELECT ADRESSE, AGENCE, AUTRE_REF, CHAUFFEUR, CODE_CLIENT, CODE_DEST, CODE_MAG, CP, CREE_PAR, DATE_CLOTUR, DATE_CREE, DATE_MODIF, EMAIL, ENLEV_CREMB, ENLEV_DECL, ENLEV_UNITE, FACTURATION, FAX, INSEE, LIVRS_EXPRS, LIVRS_SAMD, LIVRS_SIGN, MODAL_MODE, MODAL_PORT, MODAL_SPEC, MODIF_PAR, NBR_COLIS, NO_ORDRE, OBS, PAYS, POID, POID_COR, REF_EXPED, RS_NOM, SIRET, STATUT_ORDRE, TEL, TRANSPORTEUR, VILLE FROM ORDRE WHERE (STATUT_ORDRE = 2) AND (TRANSPORTEUR IN (@NextString))
END 

我试过这个,但在工作中并没有达到我的预期

提前谢谢你,
如果您知道@NextString中有多少个参数,可以使用 每平方米、每平方米、每平方米。。。。。。 或者您需要使用exec来执行sql 声明@sql varcharmax set@sql='SELECT address,AGENCE,AUTRE\u REF, 司机,客户,目的地, 代码、符号、符号、日期、, DATE_CREE,DATE_MODIF,电子邮件, ENLEV_CREMB,ENLEV_DECL,ENLEV_UNITE,制造, 传真,插入,LIVRS_EXPRS,LIVRS_SAMD,LIVRS_SIGN, 模态模式、模态端口、模态规范、修改参数、NBR\U COLIS、, 无订单、OBS、PAYS、POID、POID、POID、COR、REF EXPED、RS_NOM、SIRET、STATUT_ORDRE、TEL、TRANSPORT EUR、VILE FROM ORDRE,其中STATUT_ORDRE=2,TRANSPORT EUR在“+@NextString+ exec@sql 您应该将@NextString设置为“p1,p2,p3”

================================================================================== 更新日期:2013年1月11日

创建spiting函数

CREATE FUNCTION [dbo].[udf_Split]    
( @Words nvarchar(MAX)    
, @splitStr varchar(50)    
)    
RETURNS @Result_Table TABLE    
(    
[word] nvarchar(max) NULL    
)    
BEGIN    
Declare @TempStr nvarchar(MAX)    
WHILE (CHARINDEX(@splitStr,@Words)>0)    
BEGIN    
Set @TempStr=SUBSTRING(@Words,1,CHARINDEX(@splitStr,@Words)-1)    
Insert into @Result_Table (word) Values (rtrim(ltrim(@TempStr)))    
Set @Words = REPLACE(@Words,@TempStr+@splitStr,'')    
END    
IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0)    
Begin    
Set @TempStr=@Words    
Insert into @Result_Table (word) Values (rtrim(ltrim(@TempStr)))    
End    
RETURN    
END 
然后使用join而不是in


如果您知道@NextString中有多少个参数,可以使用 每平方米、每平方米、每平方米。。。。。。 或者您需要使用exec来执行sql 声明@sql varcharmax set@sql='SELECT address,AGENCE,AUTRE\u REF, 司机,客户,目的地, 代码、符号、符号、日期、, DATE_CREE,DATE_MODIF,电子邮件, ENLEV_CREMB,ENLEV_DECL,ENLEV_UNITE,制造, 传真,插入,LIVRS_EXPRS,LIVRS_SAMD,LIVRS_SIGN, 模态模式、模态端口、模态规范、修改参数、NBR\U COLIS、, 无订单、OBS、PAYS、POID、POID、POID、COR、REF EXPED、RS_NOM、SIRET、STATUT_ORDRE、TEL、TRANSPORT EUR、VILE FROM ORDRE,其中STATUT_ORDRE=2,TRANSPORT EUR在“+@NextString+ exec@sql 您应该将@NextString设置为“p1,p2,p3”

================================================================================== 更新日期:2013年1月11日

创建spiting函数

CREATE FUNCTION [dbo].[udf_Split]    
( @Words nvarchar(MAX)    
, @splitStr varchar(50)    
)    
RETURNS @Result_Table TABLE    
(    
[word] nvarchar(max) NULL    
)    
BEGIN    
Declare @TempStr nvarchar(MAX)    
WHILE (CHARINDEX(@splitStr,@Words)>0)    
BEGIN    
Set @TempStr=SUBSTRING(@Words,1,CHARINDEX(@splitStr,@Words)-1)    
Insert into @Result_Table (word) Values (rtrim(ltrim(@TempStr)))    
Set @Words = REPLACE(@Words,@TempStr+@splitStr,'')    
END    
IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0)    
Begin    
Set @TempStr=@Words    
Insert into @Result_Table (word) Values (rtrim(ltrim(@TempStr)))    
End    
RETURN    
END 
然后使用join而不是in


我试过这个,但效果并不完全符合我的预期需要更多的细节…我发现它:[SQL SPLIT][1][1]:我尝试过这个,但并没有达到我预期的效果需要更多详细信息…我发现它:[SQL SPLIT][1][1]: