通用自動為某表某欄位生成複製名稱的儲存過程
當在表tab(id, name...)中生成一條新紀錄,其他欄位都與原紀錄一致,但name欄位必須按name, Copy of name, Copy (2) of name, Copy (3) of name的規律變化,用下面的SP可以輕鬆達到此目的。
它是通用的,可以針對任何表的varchar(char)型別的欄位,生成新名稱。
-- SP_generate_copy_object_name
-- ============================================
-- Procedure Name : SP_generate_copy_object_name
-- Function : generate a object name that is copied
-- Failure return : ''
-- Success return : the new object name
--
-- Parameters :
-- @table_name :
-- @field_name :
-- @field_value : the value of the field
-- @field_length : the length of the field
--
-- Description:
-- original field name 'ProductReport' --> 'Copy of ProductReport' --> 'Copy (2) of ProductReport' --> 'Copy (3) of ProductReport'... --> 'Copy (9999) of ProductReport'...
-- ============================================
IF EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'SP_generate_copy_object_name') and objectproperty(id, N'IsProcedure') = 1)
DROP PROCEDURE SP_generate_copy_object_name
GO
DROP PROCEDURE SP_generate_copy_object_name
GO
CREATE PROCEDURE SP_generate_copy_object_name
(
@table_name varchar(128),
@field_name varchar(128),
@field_value VARCHAR(128),
@field_length INT = 128,
@new_object_name varchar(128) OUTPUT
)
--WITH ENCRYPTION
AS
DECLARE
@exists INT,
@tmp_field_value VARCHAR(128),
@sql NVARCHAR(500),
@i INT
BEGIN
-- Check input parameter field_value
IF (@field_value IS NULL) OR (LTRIM(@field_value) = '')
BEGIN
RETURN 1
END
-- you need at least use the first five characters of object name
-- 1. search 'Copy of ' + @field_value
SET @tmp_field_value = @field_value
IF len(@tmp_field_value) > @field_length - 8
BEGIN
SET @tmp_field_value = SUBSTRING(@tmp_field_value, 1, @field_length - 11) + '...'
END
ELSE
BEGIN
SET @tmp_field_value = @tmp_field_value
END
SET @sql = N'drop table ##tab_tmp create table ##tab_tmp(exist_flag int) insert into ##tab_tmp(exist_flag) SELECT count(1) FROM ' + @table_name + ' WHERE ' + @field_name + ' LIKE ''Copy of ' + @tmp_field_value + ''''
EXEC SP_EXECUTESQL @sql
select @exists = exist_flag from ##tab_tmp
IF @exists = 0
BEGIN
SET @new_object_name = 'Copy of ' + @tmp_field_value
RETURN 0
END
-- 2. search N'Copy (%) of ' + @field_value
SET @i = 2
WHILE ( @i < 9999 )
BEGIN
SET @tmp_field_value = @field_value
IF len(@tmp_field_value) > @field_length - (11 + LEN(@i))
BEGIN
SET @tmp_field_value = SUBSTRING( @tmp_field_value, 1, @field_length - (11 + LEN(@i) + 3) ) + '...'
END
ELSE
BEGIN
SET @tmp_field_value = @tmp_field_value
END
SET @sql = N'drop table ##tab_tmp create table ##tab_tmp(exist_flag int) insert into ##tab_tmp(exist_flag) SELECT count(1) FROM ' + @table_name + ' WHERE ' + @field_name + ' LIKE ''Copy (' + CONVERT(VARCHAR(4), @i) + ') of ' + @tmp_field_value + ''''
EXEC sp_executesql @sql
select @exists = exist_flag from ##tab_tmp
IF (@exists = 0)
BEGIN
SET @new_object_name = 'Copy (' + CONVERT(VARCHAR(4), @i) + ') of ' + @tmp_field_value
RETURN 0
END
SET @i = @i + 1
END
-- if error occur return null
RETURN 1
END
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-791332/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用事物碼 SAT 查詢某個 SAPGUI 螢幕欄位對應的後臺儲存資料庫表的名稱GUI資料庫
- 如何找到某個 ABAP structure 某欄位的源頭來自哪個資料庫表Struct資料庫
- 逆向工程通過某個欄位排序排序
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- mybatis-plus 獲取某列表的某欄位的集合MyBatis
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- 如何查詢某個資料表中除某個欄位的所有資訊???
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- 如何查詢 SAPGUI 螢幕上某個欄位對應的資料庫表儲存的試讀版GUI資料庫
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- pbootcms模板首頁如何某個指定的欄目名稱和連結boot
- 揭秘PostgreSQL:如何查詢表欄位名稱SQL
- PbootCMS模板首頁如何呼叫某個指定的欄目名稱和連結boot
- mysql資料表按照某個欄位分類輸出MySql
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- 【EF Core】自動生成的欄位值
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- 獲得某個類的所有宣告的欄位
- list集合根據某欄位分組
- ElasticSearch 設定某個欄位不分詞Elasticsearch分詞
- 透過JPA註解獲取某個類主鍵欄位
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- hive將查詢資料插入表中某欄位無資料Hive
- mysql如何判斷是否存在某個欄位MySql
- Android studio 自動複製生成的 apkAndroidAPK
- MySQL中修改一個資料庫下包含有某個相同欄位的所有表的欄位長度MySql資料庫
- 如何自動儲存複製B站、皮皮搞笑別人的影片?
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- 通用元件:自動更新套件的使用過程元件套件
- 某儲存專案RAID卡出現踢盤動作AI
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- 查詢某欄位有特殊字元(PATINDEX函式)字元Index函式
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- 二維陣列根據某個欄位排序陣列排序
- 【MSSQL】sqlserver 各種判斷是否存在(表名、函式、儲存過程.......)SQLServer函式儲存過程
- MySQL查詢某個欄位含有字母數字的值MySql