日期:2014-05-16 浏览次数:20544 次
create table tableA
(
id int --非主键字段
) go;
create procedure toinserttb(@strID varchar(1000)) --@strID '1,2,3,4'
as
begin
declare @str varchar(8000)
set @str = 'insert into tableA(id) '
set @str = @str + ' select ' + replace(@strID,',',' union all select ')
exec(@str)
end
go
exec toinserttb '1,2,3,4'
--1. 创建fn_Split函数. ( 切分字符串, 返回一个列名为id的表 )
IF EXISTS(
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID('fn_Split')
AND (TYPE = 'FN' OR TYPE = 'TF' OR TYPE = 'IF')
)
DROP FUNCTION fn_Split
GO
CREATE FUNCTION [dbo].[fn_Split]
(
@str VARCHAR(MAX),
@separator VARCHAR(10)
)
RETURNS TABLE
AS
RETURN
(
--Example: SELECT id FROM fn_Split('a,b,d,c',',')
SELECT B.id
FROM (
(
--A 的作用只是生成 '<v>a</v><v>b</v><v>d</v><v>c</v>' 的XML格式的数据, 提供数据源
SELECT [value] = CONVERT(XML, '<v>' + REPLACE(@str, @separator, '</v><v>') + '</v>')
) A
OUTER APPLY
(
--B 的作用是将A中的 XML 数据的值枚举出来转换成行
SELECT id = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/v') N(v)
) B
)
)
GO
--测试表
IF OBJECT_ID('test_t') IS NOT NULL
DROP TABLE test_t
GO
CREATE TABLE test_t (
pkId INT IDENTITY(1,1) ,
id INT,