Behrouz_Rad
چهارشنبه 16 اسفند 1385, 08:13 صبح
بنده از SP زیر برای تبدیل یک رشته که با کاراکتر "," از هم تفکیک شده اند برای مقادیر کلاس IN استفاده می کنم (البته میشه از UDF هم استفاده کرد):
CREATE PROCEDURE spGetFilesList
(
@list ntext,
@fileGroupID int,
@delimiter nchar(1) = N','
)
AS
BEGIN
CREATE TABLE #tblSplit
( listpos int IDENTITY(1, 1) NOT NULL,
str varchar(4000),
nstr nvarchar(2000)
)
DECLARE @pos int,
@textpos int,
@chunklen smallint,
@tmpstr nvarchar(4000),
@leftover nvarchar(4000),
@tmpval nvarchar(4000)
SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength(@list) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
SET @textpos = @textpos + @chunklen
SET @pos = charindex(@delimiter, @tmpstr)
WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT #tblSplit (str, nstr) VALUES(@tmpval, @tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END
SET @leftover = @tmpstr
END
INSERT #tblSplit(str, nstr) VALUES (ltrim(rtrim(@leftover)), ltrim(rtrim(@leftover)))
--DELETE FROM tblFiles WHERE strFileName NOT IN(tblSplit.nstr) AND intFileGroup = @fileGroupID
SELECT O.* FROM tblfiles O, #tblSplit tblSplit WHERE O.intFileGroup = @fileGroupID AND O.strFileName IN (tblSplit.nstr)
END
GO
دستور DELETE رو فعلا غیر فعال کردم. در این دستور خطای عدم شناخت شی گرفته میشه.
?any idea
متشکرم.:لبخندساده:
CREATE PROCEDURE spGetFilesList
(
@list ntext,
@fileGroupID int,
@delimiter nchar(1) = N','
)
AS
BEGIN
CREATE TABLE #tblSplit
( listpos int IDENTITY(1, 1) NOT NULL,
str varchar(4000),
nstr nvarchar(2000)
)
DECLARE @pos int,
@textpos int,
@chunklen smallint,
@tmpstr nvarchar(4000),
@leftover nvarchar(4000),
@tmpval nvarchar(4000)
SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength(@list) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
SET @textpos = @textpos + @chunklen
SET @pos = charindex(@delimiter, @tmpstr)
WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT #tblSplit (str, nstr) VALUES(@tmpval, @tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END
SET @leftover = @tmpstr
END
INSERT #tblSplit(str, nstr) VALUES (ltrim(rtrim(@leftover)), ltrim(rtrim(@leftover)))
--DELETE FROM tblFiles WHERE strFileName NOT IN(tblSplit.nstr) AND intFileGroup = @fileGroupID
SELECT O.* FROM tblfiles O, #tblSplit tblSplit WHERE O.intFileGroup = @fileGroupID AND O.strFileName IN (tblSplit.nstr)
END
GO
دستور DELETE رو فعلا غیر فعال کردم. در این دستور خطای عدم شناخت شی گرفته میشه.
?any idea
متشکرم.:لبخندساده: