de que asi no se hace una asignacion de valores dinamica, para eso tendrias que construir un query dinamico, te recomiendo que investigues sobre como regresar valores usando la instruccion
sp_executesql
tu query quedaria de esta manera:
Código SQL:
Ver originalDECLARE @document VARCHAR(64),@campo VARCHAR(25),@campov VARCHAR(25),@campo1 VARCHAR(35),@campo2 VARCHAR(35),@campo3 VARCHAR(35), @pos, @pos1
DECLARE @query Nvarchar(MAX)
SELECT @document = 'Reflectors;are;vital;safety components55;of your bicycle.'
SET @campov= SUBSTRING(@document,@pos,@pos1-@pos)
SET @query=@campo + CONVERT(VARCHAR,@intFlag) + '=' + @campov
EXEC sp_executesql @query
ahora a lo que comentaste que traes un archivo con valores separados por ",", de ser asi podrias usar un BCP insert o un bulk insert para poner tus datos en orden, otra cosa que podrias usar es una funcion como esta:
Código SQL:
Ver original/****** Object: UserDefinedFunction [dbo].[SplitApplication] Script Date: 10/19/2010 15:12:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
RETURNS @RtnValue TABLE
(
Id INT IDENTITY(1,1),
DATA nvarchar(100)
)
AS
BEGIN
DECLARE @Cnt INT, @SplitOn nvarchar(5)
SET @SplitOn = ','
SET @Cnt = 1
While (Charindex(@SplitOn,@applicationid)>0)
BEGIN
INSERT INTO @RtnValue (DATA)
SELECT
DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
SET @Cnt = @Cnt + 1
END
INSERT INTO @RtnValue (DATA)
SELECT DATA = ltrim(rtrim(@applicationid))
RETURN
END
GO
una vez creada la funcion la usamos de la siguiente manera:
Código SQL:
Ver originalhow TO USE :
SELECT * FROM TABLE WHERE DATA IN (
SELECT * FROM SplitApplication('1,1,1,1')
)
en tu caso cambiarias la "," por ";"