將MSSQL表數據轉成SQL語句

創建一個把表記錄轉換成SQL語句

CREATE PROC [dbo].[up_tb_tosql]
@tbname varchar(200) = '',<span style="white-space:pre">	</span>--表名
@rownum varchar(10) ='1000'<span style="white-space:pre">	</span>--轉換條數
as
BEGIN
--表名檢查
IF @tbname = ''
BEGIN
	return 0;
END
--條數驗證
IF @rownum is null 
BEGIN
	SET @rownum ='1000'; 
END
--定義變量
DECLARE @colinfo varchar(8000)
DECLARE @sqlinfo varchar(8000)
DECLARE @sqlcmd varchar(8000)
DECLARE @sqlst varchar(800)
DECLARE @sqlend varchar(800)
SET @sqlcmd='';
SET @sqlst='';
SET @sqlend='';
--生成列信息
SELECT @colinfo=replace(replace(CAST (( SELECT  case when system_type_id in (61,58) then convert(varchar(20),name,120) else  name end +',' from sys.columns 
			WHERE  object_name(object_id)=@tbname
			FOR XML PATH(''), TYPE) AS NVARCHAR(MAX) ) ,'</name>',''),'<name>','');
SELECT @colinfo=Left(@colinfo,len(@colinfo)-1);
--拼接列名
SELECT @sqlinfo=replace(replace(CAST (( SELECT  case when system_type_id in (58,61) then '+convert(varchar(20),isnull('+name+',''''),120)+'''''',''''''' else  '+replace(CAST(isnull('+name+','''') as varchar(2000)),'''''''','''')+'''''',''''''' end 
from sys.columns 
			WHERE object_name(object_id)=@tbname
			FOR XML PATH(''), TYPE) AS NVARCHAR(MAX) ) ,'</name>',''),'<name>','');
SELECT @sqlinfo=Left(@sqlinfo,len(@sqlinfo)-8);

--查詢是否自增
IF exists (SELECT * FROM  sys.columns  WHERE  object_name(object_id)=@tbname and is_identity=1)
BEGIN
	SET @sqlst='SELECT ''SET identity_insert ['+@tbname+'] ON ''
UNION ALL ';
	SET @sqlend='UNION ALL
SELECT '' SET identity_insert ['+@tbname+'] OFF  ''';
END
--拼寫整個SQL
SELECT @sqlcmd=@sqlst+'
SELECT TOP '+@rownum+' ''INSERT INTO ['+@tbname+']('+@colinfo+') SELECT '''''''+@sqlinfo+ '+'''''';'' FROM '+@tbname+'
'+@sqlend;
--SELECT @sqlcmd,@sqlst,@colinfo,@sqlinfo,@tbname,@sqlend,@rownum;
--執行SQL
exec (@sqlcmd);
--print @sqlcmd;
end

調用方式
up_tb_tosql('t_tbnam','10000');


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章