久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL Server中怎么實(shí)現(xiàn)數(shù)據(jù)行批量插入腳本的存儲(chǔ)

共計(jì) 5894 個(gè)字符,預(yù)計(jì)需要花費(fèi) 15 分鐘才能閱讀完成。

這篇文章給大家介紹 SQL Server 中怎么實(shí)現(xiàn)數(shù)據(jù)行批量插入腳本的存儲(chǔ),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

本存儲(chǔ)運(yùn)行于 SQL Server 2005 或以上版本,T-SQL 代碼如下:

 IF OBJECT_ID(N dbo.usp_GetInsertSQL ,  P) IS NOT NULL BEGIN DROP PROCEDURE dbo.usp_GetInsertSQL; END GO --================================== --  功能:  獲取數(shù)據(jù)表記錄插入的 SQL 腳本  --  說明:  具體實(shí)現(xiàn)闡述  --  作者: XXX --  創(chuàng)建: yyyy-MM-dd --  修改: yyyy-MM-dd XXX  修改內(nèi)容描述  --================================== CREATE PROCEDURE dbo.usp_GetInsertSQL ( @chvnTable NVARCHAR(), --  數(shù)據(jù)表名稱 (建議只使用表名稱,不要帶有分隔符[]) @chvnWhere NVARCHAR() = N , -- where 查詢條件(不帶 WHERE 關(guān)鍵字) @bitIsSingleRow BIT = --  是否單行模式,默認(rèn)為單行模式(單行模式為單行 INSERT INTO VALUES 格式;非單行模式(多行模式)為多行 INSERT INTO SELECT 格式) ) --$Encode$-- AS BEGIN SET NOCOUNT ON; SET @bitIsSingleRow = ISNULL(@bitIsSingleRow, ); DECLARE @intTableID AS INT, @chvnSchemaTableName NVARCHAR();/* 格式:[schema].[table]--++++++(各部分對(duì)應(yīng)字符數(shù))*/ SELECT @intTableID = , @chvnSchemaTableName = N  SELECT @intTableID = object_id ,@chvnSchemaTableName = QUOTENAME(SCHEMA_NAME(schema_id)) + N .  + QUOTENAME(@chvnTable) /* 組合架構(gòu)名稱和表名稱的連接 */ FROM sys.objects WHERE name = @chvnTable AND type =  U  DECLARE @chvnColumnNames NVARCHAR(), --  字段列名集,多個(gè)以逗號(hào) , 分隔,格式如:[column_name],[column_name],... @chvnColumnValues AS NVARCHAR(MAX); --  字段列值集,多個(gè)以逗號(hào) , 分隔  DECLARE @chvnTSQL AS NVARCHAR(MAX), -- TSQL 腳本變量  @chvnInsertIntoBoday AS NVARCHAR(); -- InsertInto 主體變量  SELECT @chvnTSQL = N , @chvnInsertIntoBoday = N  SELECT @chvnColumnNames = ISNULL(@chvnColumnNames + N , , N) + QUOTENAME(T.column_name) ,@chvnColumnValues = ISNULL(@chvnColumnValues + N  +  ,  +  , N) + CAST(T.column_value AS NVARCHAR()) FROM (SELECT name AS column_name /* 字段列名 */ /* 字段列值 */ ,column_value = CASE WHEN system_type_id IN (, , , , , , , , , , ) /* 數(shù)字?jǐn)?shù)據(jù)類型:整數(shù)數(shù)據(jù)類型(bit、tinyint、smallint、int、bigint),帶精度和小數(shù)的數(shù)據(jù)類型(decimal、numeric) 和貨幣數(shù)據(jù)類型(monery 和 smallmoney*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE CAST( + name +   AS VARCHAR) END  WHEN system_type_id IN (, , , , ) /* 日期和時(shí)間數(shù)據(jù)類型:datetime、smalldatetime(兼容 sql server  新增  date、datetime 和 time)*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE   + REPLACE(CONVERT(VARCHAR(),   + name +  , ),   ::. ,  ) +   END  WHEN system_type_id IN () /* 字符串?dāng)?shù)據(jù)類型:varchar*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE   + REPLACE(  + name +  ,  , ) +   END  WHEN system_type_id IN () /*Unicode 字符串?dāng)?shù)據(jù)類型:nvarchar*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE  N  + REPLACE(  + name +  ,  ,) +   END  WHEN system_type_id IN () /* 字符串?dāng)?shù)據(jù)類型:char*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE   + CAST(REPLACE(  + name +  ,   ,) AS CHAR( + CAST(max_length AS VARCHAR) +  )) +   END  WHEN system_type_id IN () /*nicode 字符串?dāng)?shù)據(jù)類型:nchar*/ THEN  CASE WHEN  + name +   IS NULL THEN  NULL  ELSE  N  + CAST(REPLACE(  + name +  ,   ,) AS CHAR( + CAST(max_length AS VARCHAR) +  )) +   END  ELSE  NULL  END FROM sys.columns WHERE object_id = @intTableID ) AS T; SET @chvnInsertIntoBoday = N INSERT INTO  + @chvnSchemaTableName + N  ( + @chvnColumnNames + N)  --  方式一、代碼格式使用了 GOTO 和 Label --BEGIN -- IF @bitIsSingleRow = /* 多行模式 */ -- BEGIN -- SET @chvnTSQL = N SELECT  SELECT   +   + @chvnColumnValues +   AS RowData, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNum FROM   + @chvnSchemaTableName -- --  此處不能使用 GOTO WhereCondition;, 因?yàn)橹蟮拇a不會(huì)被執(zhí)行  -- IF @chvnWhere     -- BEGIN -- SET @chvnTSQL = @chvnTSQL +   WHERE   + @chvnWhere; -- END -- --  處理多行模式,需要使用 ROW_NUMBER 窗口函數(shù)  -- SET @chvnTSQL = N SELECT CASE WHEN T.rownum = THEN REPLICATE(N   , LEN(N UNION ALL ) + ) + T.RowData ELSE N UNION ALL   + T.RowData END  + -- N  FROM ( + @chvnTSQL + N) AS T  -- SET @chvnTSQL = N SELECT  + @chvnInsertIntoBoday + N  + -- @chvnTSQL; -- GOTO MultiRow; -- END -- ELSE IF @bitIsSingleRow = /* 當(dāng)行模式 */ -- BEGIN -- SET @chvnTSQL = N SELECT   + @chvnInsertIntoBoday + -- N  +  VALUES( +   + @chvnColumnValues +   +   FROM   + @chvnSchemaTableName; -- GOTO WhereCondition; -- END -- -- where 查詢條件  -- WhereCondition: -- IF @chvnWhere     -- BEGIN -- SET @chvnTSQL = @chvnTSQL +   WHERE   + @chvnWhere; -- END -- MultiRow:/* 多行模式 GOTO 的 Label 空標(biāo)記 */ --END --  方式二、存在部分代碼的冗余  BEGIN IF @bitIsSingleRow = /* 多行模式 */ BEGIN SET @chvnTSQL = N SELECT  SELECT   +   + @chvnColumnValues +   AS RowData, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNum FROM   + @chvnSchemaTableName IF @chvnWhere     BEGIN SET @chvnTSQL = @chvnTSQL +   WHERE   + @chvnWhere; END --  多行模式特殊代碼,需要使用 ROW_NUMBER 窗口函數(shù)  SET @chvnTSQL = N SELECT CASE WHEN T.rownum = THEN REPLICATE(N   , LEN(N UNION ALL ) + ) + T.RowData ELSE N UNION ALL   + T.RowData END  + N  FROM ( + @chvnTSQL + N) AS T  SET @chvnTSQL = N SELECT  + @chvnInsertIntoBoday + N  + @chvnTSQL; END ELSE IF @bitIsSingleRow = /* 單行模式 */ BEGIN SET @chvnTSQL = N SELECT   + @chvnInsertIntoBoday + N  +  VALUES( +   + @chvnColumnValues +   +   FROM   + @chvnSchemaTableName; IF @chvnWhere     BEGIN SET @chvnTSQL = @chvnTSQL +   WHERE   + @chvnWhere; END END END PRINT @chvnTSQL; EXEC(@chvnTSQL); END GO

為了測(cè)試以上存儲(chǔ)的效果,下面準(zhǔn)備一個(gè)有數(shù)據(jù)的數(shù)據(jù)表,T-SQL 代碼如下:

 IF OBJECT_ID(N dbo.UserLoginInfo , N U) IS NOT NULL BEGIN DROP TABLE dbo.UserLoginInfo; END GO -- create testing table UserLoginInfo CREATE TABLE dbo.UserLoginInfo ( ID INT IDENTITY(, ) PRIMARY KEY, Name VARCHAR() NOT NULL, LoginTime DATETIME NOT NULL ); GO -- insert testing data INSERT dbo.UserLoginInfo (Name, LoginTime) VALUES (zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::) ,(zhang ,  -- ::) ,(li ,  -- ::) ,(wang ,  -- ::  GO  先測(cè)試單行模式的效果,相應(yīng)的 T -SQL 代碼如下: EXEC dbo.usp_GetInsertSQL @chvnTable = N UserLoginInfo , -- nvarchar() @chvnWhere = N , -- nvarchar() @bitIsSingleRow = ; -- bit GO

再測(cè)試多行模式的效果,相應(yīng)的 T -SQL 代碼如下:

 EXEC dbo.usp_GetInsertSQL @chvnTable = N UserLoginInfo , -- nvarchar() @chvnWhere = N , -- nvarchar() @bitIsSingleRow = ; -- bit GO

關(guān)于 SQL Server 中怎么實(shí)現(xiàn)數(shù)據(jù)行批量插入腳本的存儲(chǔ)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-03發(fā)表,共計(jì)5894字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 玉田县| 彭泽县| 昌黎县| 淮安市| 盐津县| 易门县| 新疆| 墨玉县| 临汾市| 娄底市| 乌拉特中旗| 寿阳县| 长治市| 林芝县| 罗甸县| 乌兰浩特市| 沧源| 江门市| 田林县| 广平县| 湛江市| 河源市| 博罗县| 宁阳县| 昭通市| 南木林县| 威信县| 淮阳县| 博爱县| 哈巴河县| 陈巴尔虎旗| 乐陵市| 隆尧县| 隆昌县| 兴业县| 东台市| 定安县| 大港区| 河池市| 鹤庆县| 蕲春县|