经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
动态为表添加存储时间字段
来源:cnblogs  作者:Insus.NET  时间:2019/5/30 8:54:50  对本文有异议

实现动态化,为表添加存储时间字段,Insus.NET写一个存储过程,如下

 

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5.  
  6. -- =============================================
  7. -- Author: Insus.NET
  8. -- Blog: https://insus.cnblogs.com
  9. -- Create date: 2019-05-29
  10. -- Update date: 2019-05-29
  11. -- Description: 动态为表添加存储时间字段
  12. -- =============================================
  13. CREATE PROCEDURE [dbo].[usp_DyanmicallyAddStorageDatetimeField]
  14. (
  15. @TABLE_CATALOG SYSNAME,
  16. @TABLE_SCHEMA SYSNAME,
  17. @TABLE_NAME SYSNAME,
  18. @COLUMNs NVARCHAR(MAX) -- '[column1],[column2],[column3]...'
  19. )
  20. AS
  21. BEGIN
  22. DECLARE @source TABLE ([ID] INT IDENTITY(1,1), [value] NVARCHAR(MAX))
  23. INSERT INTO @source ([value]) SELECT [value] FROM [dbo].[tvf_ConvertStringToTable](@COLUMNs,',')
  24. DECLARE @r INT = 1,@rs INT = 0
  25. SELECT @rs = MAX([ID]) FROM @source
  26.  
  27. WHILE @r <= @rs
  28. BEGIN
  29. DECLARE @COLUMN_NAME SYSNAME
  30. SELECT @COLUMN_NAME = CONVERT(VARCHAR(30), [value], 23) FROM @source WHERE [ID] = @r
  31.  
  32. EXECUTE('IF [dbo].[usp_IsExistsColumn]('''+ @TABLE_CATALOG +''','''+ @TABLE_SCHEMA +''','''+ @TABLE_NAME +''','''+ @COLUMN_NAME +''') = 0 ALTER TABLE '+ @TABLE_NAME +' ADD '+ @COLUMN_NAME +' DATETIME')
  33. SET @r= @r + 1
  34. END
  35. END
Source Code

 

上面存储过程代码#54行中有一个定义函数:[dbo].[tvf_ConvertStringToTable]()

是分割字符串转为表。函数详细代码参考这篇《展开中断或忽略的序号https://www.cnblogs.com/insus/p/10929956.html

还有一个自定义函数:[dbo].[usp_IsExistsColumn]()这是判断表的列是否存在。

参考:《判断列名是否存在https://www.cnblogs.com/insus/p/10943356.html


接下来,Insus.NET演示这个存储过程[dbo].[usp_DyanmicallyAddStorageDatetimeField]:

 

  1. IF OBJECT_ID('tempdb..#TempRpt') IS NOT NULL DROP TABLE #TempRpt
  2. CREATE TABLE #TempRpt
  3. (
  4. [caseno] bigint,
  5. [username] nvarchar(20)
  6. )
  7. EXECUTE [dbo].[usp_DyanmicallyAddStorageDatetimeField] 'tempdb','dbo','#TempRpt','[column1],[column2],[column3]'
  8.  
  9. SELECT * FROM #TempRpt
Source Code

 

原文链接:http://www.cnblogs.com/insus/p/10943614.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号