通用自動為某表某欄位生成複製名稱的儲存過程
當在表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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程判斷若個表中是否存在某個名稱的欄位儲存過程
- 更新大表中某個欄位的儲存過程儲存過程
- 獲取SQL資料庫中某個表中的所有欄位名稱的通用方法SQL資料庫
- 在SQL Server中修改欄位型別和欄位名稱的儲存過程SQLServer型別儲存過程
- 獲取某庫某個儲存過程內容儲存過程
- 輸入表名後自動生成sqlldr控制檔案儲存過程SQL儲存過程
- 如何使用事物碼 SAT 查詢某個 SAPGUI 螢幕欄位對應的後臺儲存資料庫表的名稱GUI資料庫
- 轉化某個字母字串為反向大小寫儲存過程字串儲存過程
- goldengate 過濾對某張表的複製操作Go
- 自動生成對錶進行插入和更新的儲存過程的儲存過程 (轉)儲存過程
- 如何找到某個 ABAP structure 某欄位的源頭來自哪個資料庫表Struct資料庫
- 查詢某個儲存過程有哪些內容儲存過程
- SQL 重新命名錶、欄位、儲存過程名sp_renameSQL儲存過程
- 【GP】透過資料字典檢視某個表的欄位
- 逆向工程通過某個欄位排序排序
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- 如何查詢某個資料表中除某個欄位的所有資訊???
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- sql去除某個欄位中的某個字串 replaceSQL字串
- 表中已有資料,將表中某個欄位為空的改為非空
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- mybatis-plus 獲取某列表的某欄位的集合MyBatis
- 把自編儲存過程設定為系統儲存過程儲存過程
- 通用分頁儲存過程儲存過程
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- 動態給表新增刪除欄位並同時修改它的插入更新儲存過程儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- 如何查詢 SAPGUI 螢幕上某個欄位對應的資料庫表儲存的試讀版GUI資料庫
- 自動編號的儲存過程 (轉)儲存過程
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- 用儲存過程動態建立表儲存過程
- 查詢某個欄位的不同值
- 用 System.Reflection.Emit 來自動生成呼叫儲存過程的實現MIT儲存過程
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- mysql資料表按照某個欄位分類輸出MySql
- 如何刪除名稱相同的儲存過程儲存過程
- 有沒有辦法判斷某個儲存過程是否在執行?儲存過程
- mybatis動態呼叫表名和欄位名MyBatis