SQL SERVER 存储过程有问
CREATE PROCEDURE [DBO].[usp_Insert]
@F1 VARCHAR(300)=' ',
@F2 VARCHAR(12)=' '
AS
INSERT INTO TableName(F1,F2, DATES) VALUES(@F1,@F2,GETDATE())
GO
@F1的值是这样的:'B07100400731,B07100400732,B07100400733,B07100400734'
@F2的值就是一个固定的值,如:'A00000000001'
我想做的是通过循环将@F1的值以逗号分开,然后一个一个插入数据库,如:
INSERT INTO TableName(F1,F2, DATES) VALUES('B07100400731','A00000000001',GETDATE())
INSERT INTO TableName(F1,F2, DATES) VALUES('B07100400732','A00000000001',GETDATE())
INSERT INTO TableName(F1,F2, DATES) VALUES('B07100400733','A00000000001',GETDATE())
INSERT INTO TableName(F1,F2, DATES) VALUES('B07100400734','A00000000001',GETDATE())
存储过程里面怎么写这个循环呢?
[解决办法]
大致思路:
create proc [dbo].[usp_Insert]@F1 VARCHAR(300)=' ',@F2 VARCHAR(12)=' 'ascreate table #t1( col varchar(12))set @F1=replace(@F1,',',''' union all select ''')set @F1='insert into #t1 select '''+@F1+''''exec (@F1)insert into tablename( F1, F2, DATES)select col, @F2, getdate()from #t1drop table #t1
[解决办法]
--> 测试数据:[tb]if object_id('[tb]') is not null drop table [tb]go create table [tb]([F1] varchar(20),[F2] varchar(20),[DATES] datetime)DECLARE @f1 VARCHAR(300)='B07100400731,B07100400732,B07100400733,B07100400734'DECLARE @f2 VARCHAR(30)='A00000000001'DECLARE @s VARCHAR(300)=@f1WHILE CHARINDEX(',',@s)>0BEGIN INSERT INTO dbo.tb VALUES (LEFT(@s,CHARINDEX(',',@s)-1), @f2,GETDATE()) SET @s=REPLACE(@s,LEFT(@s,CHARINDEX(',',@s)),'')ENDselect * from [tb]