Luben Park

          Java Ben 成長之路

          導航

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統計

          公告

          葉子的離開 是因為風的追求 還是樹的不挽留

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          2006年4月6日 #

          表名作為參數傳遞的存儲過程寫法

          SET QUOTED_IDENTIFIER ON
          GO
          SET ANSI_NULLS ON
          GO

          ?

          --=================================================================
          -- 描述:~~~~~~~~~~~~~~~~~~~~~~~~~~~
          -- 作者:魯湘
          -- @tableName?? 該模板對應的數據庫表
          -- @RecordID??? 業務處理需要尋找表中記錄的ID號碼
          --=================================================================

          ALTER??? PROCEDURE WF_QingJia
          ? ?(@tableName varchar(50),@recordID varchar(50))
          AS
          -- 獲取表中的業務數據值
          DECLARE @money varchar(100),? -- 業務邏輯需要的值
          ?@sqls nvarchar(4000)? -- 保存組合SQL語句

          SET @sqls='SELECT @a=Money FROM '+@tableName +' WHERE ID ='+@recordID

          EXECUTE sp_executesql @sqls,N'@a varchar(50) output',@money output

          -- 根據值進行相應的業務處理
          print @money
          UPDATE WF_FormBill SET [Money]='真的被處理了' WHERE [ID]=@recordID

          ?

          GO
          SET QUOTED_IDENTIFIER OFF
          GO
          SET ANSI_NULLS ON
          GO

          posted @ 2006-11-16 16:49 Ben 閱讀(960) | 評論 (0)編輯 收藏

          [轉]經典SQL語句--收藏 http://blog.ourtw.com/article.php?tid_600.html

          經典SQL語句--收藏
          [個人收藏]經典SQL語句.值得收藏
          精典的SQL語句,推薦收藏
          在網上經常轉,常常看到有些人為了求得某些SQL語句而焦頭爛額,現在我特別把自己收藏的一些比較精典的SQL拿出來和大家分享一下

          1. 行列轉換--普通

          假設有張學生成績表(CJ)如下
          Name ? Subject ? Result
          張三 ? 語文 ? ? 80
          張三 ? 數學 ? ? 90
          張三 ? 物理 ? ? 85
          李四 ? 語文 ? ? 85
          李四 ? 數學 ? ? 92
          李四 ? 物理 ? ? 82

          想變成 ?
          姓名 ? 語文 ? 數學 ? 物理
          張三 ? 80 ? 90 ? 85
          李四 ? 85 ? 92 ? 82

          declare @sql varchar(4000)
          set @sql = ''select Name''
          select @sql = @sql + '',sum(case Subject when ''''''+Subject+'''''' then Result end) [''+Subject+'']''
          from (select distinct Subject from CJ) as a
          select @sql = @sql+'' from test group by name''
          exec(@sql)

          2. 行列轉換--合并

          有表A,
          id pid
          1 ? 1
          1 ? 2
          1 ? 3
          2 ? 1
          2 ? 2
          3 ? 1
          如何化成表B:
          id pid
          1 1,2,3
          2 1,2
          3 1

          創建一個合并的函數
          create function fmerg(@id int)
          returns varchar(8000)
          as
          begin
          declare @str varchar(8000)
          set @str=''''
          select @str=@str+'',''+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
          return(@str)
          End
          go

          --調用自定義函數得到結果
          select distinct id,dbo.fmerg(id) from 表A

          3. 如何取得一個數據表的所有列名

          方法如下:先從SYSTEMOBJECT系統表中取得數據表的SYSTEMID,然后再SYSCOLUMN表中取得該數據表的所有列名。
          SQL語句如下:
          declare @objid int,@objname char(40)
          set @objname = ''tablename''
          select @objid = id from sysobjects where id = object_id(@objname)
          select ''Column_name'' = name from syscolumns where id = @objid order by colid

          是不是太簡單了? 呵呵 不過經常用阿.

          4. 通過SQL語句來更改用戶的密碼

          修改別人的,需要sysadmin role ?
          EXEC sp_password NULL, ''newpassword'', ''User''

          如果帳號為SA執行EXEC sp_password NULL, ''newpassword'', sa

          5. 怎么判斷出一個表的哪些字段不允許為空?

          select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE=''NO'' and TABLE_NAME=tablename

          6. 如何在數據庫里找到含有相同字段的表?
          a. 查已知列名的情況
          SELECT b.name as TableName,a.name as columnname
          From syscolumns ? a INNER JOIN ? sysobjects b ?
          ON a.id=b.id ?
          AND b.type=''U'' ?
          AND a.name=''你的字段名字''

          b. 未知列名查所有在不同表出現過的列名
          Select o.name As tablename,s1.name As columnname
          From syscolumns s1, sysobjects o
          Where s1.id = o.id
          ? And o.type = ''U''
          ? And Exists (
          ? ? Select 1 From syscolumns s2 ?
          ? ? Where s1.name = s2.name ?
          ? ? And s1.id <> s2.id
          ? ? )

          7. 查詢第xxx行數據

          假設id是主鍵:
          select *
          from (select top xxx * from yourtable) aa
          where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)

          如果使用游標也是可以的
          fetch absolute [number] from [cursor_name]
          行數為絕對行數

          8. SQL Server日期計算
          a. 一個月的第一天
          SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
          b. 本周的星期一
          SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
          c. 一年的第一天
          SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
          d. 季度的第一天
          SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
          e. 上個月的最后一天
          SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
          f. 去年的最后一天
          SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
          g. 本月的最后一天
          SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
          h. 本月的第一個星期一
          select DATEADD(wk, DATEDIFF(wk,0, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
          ? ? ? ? ? ? ? ? ? ? dateadd(dd,6-datepart(day,getdate()),getdate()) ? ?
          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ), 0) ? ?
          i. 本年的最后一天
          SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
          -----------------------------------------------------------------------
          1.按姓氏筆畫排序:
          Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as

          2.數據庫加密:
          select encrypt(''原始密碼'')
          select pwdencrypt(''原始密碼'')
          select pwdcompare(''原始密碼'',''加密后密碼'') = 1--相同;否則不相同 encrypt(''原始密碼'')
          select pwdencrypt(''原始密碼'')
          select pwdcompare(''原始密碼'',''加密后密碼'') = 1--相同;否則不相同

          3.取回表中字段:
          declare @list varchar(1000),@sql nvarchar(1000)
          select @list=@list+'',''+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=''表A''
          set @sql=''select ''+right(@list,len(@list)-1)+'' from 表A''
          exec (@sql)

          4.查看硬盤分區:
          EXEC master..xp_fixeddrives

          5.比較A,B表是否相等:
          if (select checksum_agg(binary_checksum(*)) from A)
          ? =
          ? (select checksum_agg(binary_checksum(*)) from B)
          print ''相等''
          else
          print ''不相等''

          6.殺掉所有的事件探察器進程:
          DECLARE hcforeach CURSOR GLOBAL FOR SELECT ''kill ''+RTRIM(spid) FROM master.dbo.sysprocesses
          WHERE program_name IN(''SQL profiler'',N''SQL 事件探查器'')
          EXEC sp_msforeach_worker ''?''

          7.記錄搜索:
          開頭到N條記錄
          Select Top N * From 表
          -------------------------------
          N到M條記錄(要有主索引ID)
          Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
          ----------------------------------
          N到結尾記錄
          Select Top N * From 表 Order by ID Desc

          8.如何修改數據庫的名稱:
          sp_renamedb ''old_name'', ''new_name''

          9:獲取當前數據庫中的所有用戶表
          select Name from sysobjects where xtype=''u'' and status>=0

          10:獲取某一個表的所有字段
          select name from syscolumns where id=object_id(''表名'')

          11:查看與某一個表相關的視圖、存儲過程、函數
          select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ''%表名%''

          12:查看當前數據庫中所有存儲過程
          select name as 存儲過程名稱 from sysobjects where xtype=''P''

          13:查詢用戶創建的所有數據庫
          select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name=''sa'')
          或者
          select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

          14:查詢某一個表的字段和數據類型
          select column_name,data_type from information_schema.columns
          where table_name = ''表名''

          [n].[標題]:
          Select * From TableName Order By CustomerName

          [n].[標題]:
          Select * From TableName Order By CustomerName

          posted @ 2006-04-06 15:01 Ben 閱讀(881) | 評論 (0)編輯 收藏

          vs2003 和vs2005下的發送SMTP郵件 (downmoon原創) 選擇自 downmoon 的 Blog

          vs2003 和vs2005下的發送SMTP郵件 (downmoon原創)
          一、vs2003
          引用 System.Web.Mail命名空間

          ?private void SenMail2003()
          ??? {
          ??????? MailMessage mailObj = new MailMessage();
          ??????? mailObj.To = this.txtTo.Text;
          ??????? mailObj.From = this.txtFrom.Text;
          ???????
          ??????? mailObj.Subject = "精采笑話";
          ??????? mailObj.Body = "豬!你已中毒! 哈哈 ";
          ???????
          ??????? mailObj.BodyFormat = MailFormat.Html;
          ??????? mailObj.BodyEncoding = MailFormat.Base64;
          ??????? mailObj.Priority = MailPriority.High;
          ??????? mailObj.Attachments.Add(new MailAttachment("c:\\swf\\000.bmp"));
          ??????? SmtpMail.Send(mailObj);
          ??????? Response.Write("發送郵件成功!");
          ??? }

          二、vs2005
          引用 System.Net.Mail命名空間,安全性得到了增強

          ?public static void SendWebMailAndAttach(string server)
          ??? {
          ???????? string file = "e:\\inetpub\\wwwroot\\Test2005All\\TestXML\\testXML.xml";
          ???????? System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage("Test@126.com", "Test@126.com", "text message for you.", "Test Title");
          ???????? System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
          ???????? System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
          ???????? disposition.CreationDate = System.IO.File.GetCreationTime(file);
          ???????? disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
          ???????? disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
          ???????? message.Attachments.Add(data);
          ??????? System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(server);
          ??????? client.Credentials = new NetworkCredential("用戶名", "密碼");
          ??????? client.Send(message);
          ??????? data.Dispose();
          ??? }
          引用示例
          SendWebMailAndAttach("smtp.126.com");

          posted @ 2006-04-06 14:18 Ben 閱讀(469) | 評論 (0)編輯 收藏

          SQL中CONVERT轉化函數, Concat , COALESCE的用法

          SQL中CONVERT轉化函數的用法

          CONVERT的使用方法:

          ////////////////////////////////////////////////////////////////////////////////////////

          格式:
          CONVERT(data_type,expression[,style])

          說明:
          此樣式一般在時間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar)
          相互轉換的時候才用到.

          例子:
          SELECT CONVERT(varchar(30),getdate(),101) now
          結果為
          now
          ---------------------------------------
          09/15/2001

          /////////////////////////////////////////////////////////////////////////////////////

          style數字在轉換時間時的含義如下

          -------------------------------------------------------------------------------------------------
          Style(2位表示年份) | Style(4位表示年份) | 輸入輸出格式
          -------------------------------------------------------------------------------------------------
          - | 0 or 100 | mon dd yyyy hh:miAM(或PM)
          -------------------------------------------------------------------------------------------------
          1 | 101 | mm/dd/yy
          -------------------------------------------------------------------------------------------------
          2 | 102 | yy-mm-dd
          -------------------------------------------------------------------------------------------------
          3 | 103 | dd/mm/yy
          -------------------------------------------------------------------------------------------------
          4 | 104 | dd-mm-yy
          -------------------------------------------------------------------------------------------------
          5 | 105 | dd-mm-yy
          -------------------------------------------------------------------------------------------------
          6 | 106 | dd mon yy
          -------------------------------------------------------------------------------------------------
          7 | 107 | mon dd,yy
          -------------------------------------------------------------------------------------------------
          8 | 108 | hh:mm:ss
          -------------------------------------------------------------------------------------------------
          - | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
          -------------------------------------------------------------------------------------------------
          10 | 110 | mm-dd-yy
          -------------------------------------------------------------------------------------------------
          11 | 111 | yy/mm/dd
          -------------------------------------------------------------------------------------------------
          12 | 112 | yymmdd
          -------------------------------------------------------------------------------------------------
          - | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小時制)
          -------------------------------------------------------------------------------------------------
          14 | 114 | hh:mi:ss:mmm(24小時制)
          -------------------------------------------------------------------------------------------------
          - | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小時制)
          -------------------------------------------------------------------------------------------------
          - | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小時制)
          -------------------------------------------------------------------------------------------------

          concat
          方法的結果等于:result = string1 + string2 + string3 + … + stringN

          COALESCE 返回其參數中第一個非空表達式

          posted @ 2006-04-06 14:15 Ben 閱讀(1972) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 梧州市| 建瓯市| 鹤岗市| 商河县| 视频| 信阳市| 南投市| 阳东县| 同仁县| 于都县| 甘泉县| 金溪县| 监利县| 大关县| 巴里| 临泉县| 清原| 宁晋县| 柏乡县| 库车县| 吴旗县| 九龙城区| 神池县| 太康县| 响水县| 扎赉特旗| 陵川县| 林周县| 许昌市| 汤原县| 滦平县| 河南省| 洮南市| 紫阳县| 天峨县| 赞皇县| 平舆县| 高阳县| 天镇县| 永春县| 雷山县|