c批量sql
1. sql 批量修改數據
使用update 更新修改資料庫數據,更改的結果集是多條數據則為批量修改。
語法格式如:
update 表格 set 列 = 更改值 where 篩選條件
例:
update table set a=1 --將table 中所以a列的值改為 1
update table set a=1 where b=2 --將table 中列b=2的記錄中a列的值改為 1
2. C#中如何將Excel中的數據批量導入到sql server
1.本文實現在c#中可高效的將excel數據導入到sqlserver資料庫中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的sheet,包括讀取(全部讀取比較慢)在我的開發環境中只需要10秒左右,而真正的導入過程只需要4.5秒。x0dx0a2.代碼如下:x0dx0ausing System; x0dx0ausing System.Data; x0dx0ausing System.Windows.Forms; x0dx0ausing System.Data.OleDb; x0dx0anamespace WindowsApplication2 x0dx0a{ x0dx0a public partial class Form1 : Form x0dx0a { x0dx0a public Form1() x0dx0a { x0dx0a InitializeComponent(); x0dx0a } x0dx0ax0dx0a private void button1_Click(object sender, EventArgs e) x0dx0a { x0dx0a //測試,將excel中的sheet1導入到sqlserver中 x0dx0a string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master"; x0dx0a System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog(); x0dx0a if (fd.ShowDialog() == DialogResult.OK) x0dx0a { x0dx0a TransferData(fd.FileName, "sheet1", connString); x0dx0a } x0dx0a } x0dx0ax0dx0a public void TransferData(string excelFile, string sheetName, string connectionString) x0dx0a { x0dx0a DataSet ds = new DataSet(); x0dx0a tryx0dx0a { x0dx0a //獲取全部數據 x0dx0a string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;"; x0dx0a OleDbConnection conn = new OleDbConnection(strConn); x0dx0a conn.Open(); x0dx0a string strExcel = ""; x0dx0a OleDbDataAdapter myCommand = null; x0dx0a strExcel = string.Format("select * from [{0}$]", sheetName); x0dx0a myCommand = new OleDbDataAdapter(strExcel, strConn); x0dx0a myCommand.Fill(ds, sheetName); x0dx0ax0dx0a //如果目標表不存在則創建 x0dx0a string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName); x0dx0a foreach (System.Data.DataColumn c in ds.Tables[0].Columns) x0dx0a { x0dx0a strSql += string.Format("[{0}] varchar(255),", c.ColumnName); x0dx0a } x0dx0a strSql = strSql.Trim(',') + ")"; x0dx0ax0dx0a using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString)) x0dx0a { x0dx0a sqlconn.Open(); x0dx0a System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand(); x0dx0a command.CommandText = strSql; x0dx0a command.ExecuteNonQuery(); x0dx0a sqlconn.Close(); x0dx0a } x0dx0a //用bcp導入數據 x0dx0a using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)) x0dx0a { x0dx0a bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied); x0dx0a bcp.BatchSize = 100;//每次傳輸的行數 x0dx0a bcp.NotifyAfter = 100;//進度提示的行數 x0dx0a bcp.DestinationTableName = sheetName;//目標表 x0dx0a bcp.WriteToServer(ds.Tables[0]); x0dx0a } x0dx0a } x0dx0a catch (Exception ex) x0dx0a { x0dx0a System.Windows.Forms.MessageBox.Show(ex.Message); x0dx0a }x0dx0a } x0dx0ax0dx0a //進度顯示 x0dx0a void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e) x0dx0a { x0dx0a this.Text = e.RowsCopied.ToString(); x0dx0a this.Update(); x0dx0a }x0dx0a } x0dx0a} x0dx0a3.上面的TransferData基本可以直接使用,如果要考慮周全的話,可以用oledb來獲取excel的表結構,並且加入ColumnMappings來設置對照欄位,這樣效果就完全可以做到和sqlserver的dts相同的效果了。
3. SQL批量插入數據
一、針對批量插入數據,如果量不是太多,可以多條SQL語句運行就可以了,
類似下面的語句,當然可以使用excel 編輯後,復制到查詢器中運行,
insert into table(a,b) values('1','a')
insert into table(a,b) values('2','b')
insert into table(a,b) values('3','c')
二、大量數批量插入,即數據表的移植,數據備份轉換之類的,就需要工具,比如MSSQL的DTS工具,pb的數據通道 等等。這里介紹一下 DTS工具。
4. sql 語句 批量修改
update 表名
set C_METHOD_NAME= lower(substring(REPLACE(C_METHOD_NAME,'process',''),1,1))+
substring(REPLACE(C_METHOD_NAME,'process',''),2,len(REPLACE(C_METHOD_NAME,'process','')))
--REPLACE(C_METHOD_NAME,'process','')用空值取代process
-- lower改小寫
--lower(substring(REPLACE(C_METHOD_NAME,'process',''),1,1))把取代後字元串的第一個字母改小寫
--再加上後面的字元串
5. sql在update更新時如何快速且大批量的更新數據(C#中寫的)
這不是才1000個數據嗎, 循環起來不會很慢, 而且也用不上case when啊親
SQL:
UPDATE tableA
SET colB=@colB, colC=@colC
WHERE colA=@colA
循環
for(var i=0; i<1000; i++)
{
colA.Value=A[i]; colB.Value=B[i]; colC.Value=C[i];
cmd.ExecuteNonQuery();
}
6. 如何在sql server 2008中 批量地更新數據,就是一次性更新多個欄位的同一行數據
你好!你寫的「」update ['+@tablename+'] set ('+@updatesp+')=(select ('+@Csql+')) where 學號='''+@sno+''''」,就好比是set a,b,c,d,e=(f,g,h,i,j),這樣肯定不能建立對應關系。我提供個思路給你:將傳進來的列名分開,用循環去更新,一次只更新一列。希望能幫到你~
7. 我有一堆sql文件需要運行 如何批量運行
可以使用批處理,調用 isql 執行 .sql文件。
1、 新建test.sql 文件。如圖,代碼執行刪除 表a中id='1'的記錄。
3、運行批處理test.bat即可執行,test.sql中的SQL語句。