加强版存储过程
转载请标明出处,引用请保留头注视。第一版链接 :
http://topic.csdn.net/u/20080516/15/3fcf4880-67e9-4a28-844d-05985db51215.html
-------------------------------------------------------------------------------
-- 自动生成测试数据共享加强版
--
-- 基本特性
-- * 表前缀:@表变量、#临时表、$实体表,支持混合多表。
-- * 无表名:@1...@n #1...#n T1...Tn
-- * 无列名:C1...Cn
-- * 少列名:Cm...Cn
-- * 列分隔:空格和TAB键。
-- * 列填充:数据左边对齐原则,数据不足右向填充NULL。
-- * 占位符:分号(;),控制数据位置,左向填充NULL。
-- * 字符集:不考虑UNICODE/NCHAR,网页能够正常显示的应该没问题,网页不能正常显示的,UNICODE也没用。
--
-- 加强特性
-- * 优化数据类型解析,基本上涵盖了所有的原始测试数据形式。
-- * 逗号(,)不再作为列分隔符,添加指定列分隔符控制,具体方法见示例。
-- * 连续(;;)或离散(;)的分号才会被解析为占位符,维持数据中的分号。
--
-- 解析类型
-- * int
-- * bigint
-- * money (New)
-- * numeric
-- * float
-- * datetime
-- * varchar
-- * varbinary (New)
-- * uniqueidentifier (New)
-- * sql_variant
--
-- Limpire(昨夜小楼)
-------------------------------------------------------------------------------
CREATE PROCEDURE CS#
(
@Input varchar(8000)
)
AS
SET NOCOUNT ON
declare @tid int,@cid int,@pos int,@num int,@p int,@s int,@tb sysname,@spt varchar(20),@inf varchar(2000),@col varchar(4000),@def sysname,@ent varchar(2),@sql varchar(8000)
declare @tables table(id int identity primary key,name sysname)
declare @data table(id int identity primary key,data varchar(8000),fc as nullif(left(nullif(data,''),charindex(' ',nullif(data,''))-1),'null'))
declare @temp table(id int primary key,temp varchar(4000))
declare @code table(id int primary key,code varchar(8000))
--> 格式整理
set @Input=replace(replace(replace(@Input collate Chinese_PRC_CS_AS_KS_WS,' ',' '),char(9),' '),char(13),char(10))
set @Input=char(10)+ltrim(rtrim(@Input))+char(10)
while charindex(char(10)+char(10),@Input)>0 set @Input=replace(@Input,char(10)+char(10),char(10))
set @Input=stuff(@Input,1,1,'')
if @Input not like '[@#$]%' and @Input not like '0[@#$]%' return
set @Input=replace(replace(@Input,'。','.'),'·','.')
select top 94 n=identity(tinyint,33,1) into # from syscolumns
select @Input=replace(@Input collate Chinese_PRC_CS_AS_KS_WS,nchar(n+65248),char(n)) f