2
我有一個函數「Split」,我正在使用遊標在存儲過程中調用該函數。調用存儲過程中的函數遊標
我a_upload
表結構是:(int, varchar(100))
upload_id allowed_file_extensions
---------------------------------------------------------------------
1 .xls, .doc, .pdf, .docx, .xlsx, .pptx, .txt
2 .xls, .doc, .pdf, .jpeg, .jpg, .docx, .xlsx, .pptx, .txt
表c_file_extensions
是:(int, varchar(100), bit)
id description is_enabled
---------------------------
1 .xls 1
2 .doc 1
3 .pdf 0
4 .rtf 1
存儲過程:
DECLARE @is_enabled Varchar(10), @allowed_file_extensions Varchar(100)
SET @is_enabled = 'True';
DECLARE cur CURSOR FORWARD_ONLY FOR
SELECT items
FROM split((SELECT allowed_file_extensions
FROM a_upload
WHERE upload_id = 1), ',')
OPEN cur
FETCH NEXT FROM cur INTO @allowed_file_extensions
WHILE @@fetch_status=0
BEGIN
IF EXISTS(SELECT *
FROM c_file_extensions
WHERE description = @allowed_file_extensions
AND is_enabled = 0)
SET @is_enabled = 'False';
FETCH NEXT FROM cur INTO @allowed_file_extensions
END
CLOSE cur
DEALLOCATE cur
SELECT @is_enabled AS Output
功能分割:
CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))
RETURNS @temptable TABLE (items varchar(8000)) AS
BEGIN
DECLARE @idx int
DECLARE @slice varchar(8000)
SELECT @idx = 1
IF LEN(@String) < 1 OR @String IS NULL RETURN
WHILE @idx!= 0
BEGIN
SET @idx = CHARINDEX(@Delimiter,@String)
IF @idx != 0
SET @slice = LEFT(@String,@idx - 1)
ELSE
SET @slice = @String
IF(LEN(@slice)>0)
INSERT INTO @temptable
(Items)
VALUES
(@slice)
SET @String = RIGHT(@String, LEN(@String) - @idx)
IF LEN(@String) = 0 BREAK
END
RETURN
END
對於upload_id = 1
,我期待輸出爲'False
',但我總是得到'True
'。我試圖調試,發現「if exists (select * from c_file_extensions where description = @allowed_file_extensions and is_enabled = 0)
」工作不正常。
啊前導空格:(謝謝坎貝爾,它的工作。謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝 – Harish