在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能

本文提供了一种解决SQL Server 2000中字符限制问题的方法,通过动态创建带有大量列的表来演示如何规避4000字符限制,并附带具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近發現還有網友在提SQL2000的字符限制問題,以下舉一個例給大家參照:

--動態建表:

use Tempdb
go
if object_id('SP_CreateTable') is not null
drop proc SP_CreateTable
go
create Procedure SP_CreateTable(
@TabName sysname,--表名
@SQLCol nvarchar(200)='',--固定列和類型定義
@COLS nvarchar(4)=1,--新建列數
@COL nvarchar(50)='COL'--列的開始字符定義
)
as
if @COLS not between 1 and 1024
begin
select N'列數指定不正確' as Error
return
end
if @SQLCol>''
set @SQLCol=@SQLCol+','

declare @s1 nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000),@j nvarchar(4)

select @s1='',@s2='',@s3='',@s4='',@j=1

while @j<=(@COLS-1)/100+1
begin
select @s1=@s1+',@'+@j+' nvarchar(4000)'
,@s2=@s2+',@'+@j+'='''''
,@s3=@s3+',@'+@j+'=case when (@i-1)/100+1='+@j+' then @'+@j+'+'',''+'''+@COL+'''+@i+'' int'' else @'+@j+' end'
,@s4=@s4+'+@'+@j
,@j=@j+1
end
select @s1=stuff(@s1,1,1,'declare ')+',@i nvarchar(4)'
,@s2=stuff(@s2,1,1,'select ')+',@i=1'
,@s3=stuff(@s3,1,1,'select ')+',@i=@i+1'
,@s4='exec('+stuff(@s4,1,1,'''create table '+@TabName+'('+@SQLCol+'''+')+'+'')'')'

exec(@s1+' '+@s2+' while @i<='+@COLS+' '+@s3+' set @1=stuff(@1,1,1,'''') '+@s4)

go

exec SP_CreateTable @TabName='Temp1'
exec SP_CreateTable @TabName='Temp2',@SQLCol='ID int identity primary key'
exec SP_CreateTable @TabName='Temp3',@SQLCol='ID int identity primary key',@COLS=40
exec SP_CreateTable @TabName='Temp4',@SQLCol='ID int identity primary key',@COLS=1023,@COL='ROY'

select * from Temp1
select * from Temp2
select * from Temp3
select * from Temp4

drop table temp1,Temp2,Temp3,temp4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值