最近一段时间项目转入SSIS,从DB2和TeraData向MSSql中迁入,其中又穿插了perl一些的知识,感觉这段时间相当的充实,以前一直关注C#,javascript,不怎么写sql,现在一天写一两千行的sql,脸不红,气不喘,一口气连上八楼都不心跳加速了.

因为一些知识只是临时性的添加,所以显得很杂乱.

(1)sql datatime 格式化

  1. Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
  2. Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
  3. Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
  4. Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
  5. Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
  6. Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
  7. Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
  8. Select CONVERT(varchar(100), GETDATE(), 7): 05 1606
  9. Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
 10. Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
 11. Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
 12. Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
 13. Select CONVERT(varchar(100), GETDATE(), 12): 060516
 14. Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
 15. Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
 16. Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
 17. Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
 18. Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
 19. Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
 20. Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
 21. Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
 22. Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
 23. Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
 24. Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
 25. Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
 26. Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
 27. Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
 28. Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
 29. Select CONVERT(varchar(100), GETDATE(), 107): 05 162006
 30. Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
 31. Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
 32. Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
 33. Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
 34. Select CONVERT(varchar(100), GETDATE(), 112): 20060516
 35. Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
 36. Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
 37. Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
 38. Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
 39. Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
 40. Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
 41. Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

(2) openquery的使用

OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源。而其他数据库在OpenQuery 表达式中是以Linked Server 存在的。 使用sp_linkedservers 可以找到当前数据库的所有linked server. OpenQuery的表达式可以这么写:

Select * from OpenQuery([linkedServerName],'Select * from T_test where id > 10')

但是如果要传递参数呢?那只能老办法,将整体做成一个字符串,然后在调用存储过程了

  create proc Sp_GetDb2 
(
@ExecuteTime datetime = getdate()
)
as
begin
  declare @ExecuteTime datetime = getdate()
  declare @sqlhead varchar(2012) = ''
  set @sqlhead = 'select * from openquery(db2_test,''select * from t_test where ctime > '
              + Convert(varchar(10),@ExecuteTime,112)+ ''')'
  exec(@sqlhead)          
end

(3)跨数据库联合更新问题