| lvlon 的个人资料LvlOn + s照片日志列表 | 帮助 |
SQL WITH AS WITH AS短语,也叫做子查询部分(subquery
factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,
也有可能是在UNION ALL的不同部分,作为提供数据的部分。
特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。 SQL ROW_NUMBER ROW_NUMBER()的用法 返回结果集分区内行的序列号,每个分区的第一行从 1 开始。 语法 ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> ) 参数 <partition_by_clause> 将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。有关 PARTITION BY 的语法,请参阅 OVER 子句 (Transact-SQL)。 <order_by_clause> 确定将 ROW_NUMBER 值分配给分区中的行的顺序。有关详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。当在排名函数中使用 <order_by_clause> 时,不能用整数表示列。 返回类型 bigint 备注 ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。 示例 注意: OVER 子句中的 ORDER BY 将对 ROW_NUMBER 进行排序。如果将 ORDER BY 子句添加到以非 'Row Number' 的某列(或多列)作为排序依据的 SELECT 语句,则结果集将以外部的 ORDER BY 为依据进行排序。 转贴SQL DATEADD DATEPART(2)目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-01-01”的时间间隔上来计算出日期。假定你修改时间间隔的数量,或者使用不同的时间间隔来调用DATEADD函数,或者减去时间间隔而不是增加,那么通过这些小的调整你可以发现和多不同的日期。 转贴SQL DATEADD DATEPART (1)LBHIDDEN[0]LBHIDDEN通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 sql sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库 字符集与排序顺序 sysconfigures 主数据库 配置选项 syscurconfigs 主数据库 当前配置选项 sysdatabases 主数据库 服务器中的数据库 syslanguages 主数据库 语言 syslogins 主数据库 登陆帐号信息 sysoledbusers 主数据库 链接服务器登陆信息 sysprocesses 主数据库 进程 sysremotelogins 主数据库 远程登录帐号 syscolumns 每个数据库 列 sysconstrains 每个数据库 限制 sysfilegroups 每个数据库 文件组 sysfiles 每个数据库 文件 sysforeignkeys 每个数据库 外部关键字 sysindexs 每个数据库 索引 sysmenbers 每个数据库 角色成员 sysobjects 每个数据库 所有数据库对象 syspermissions 每个数据库 权限 systypes 每个数据库 用户定义数据类型 sysusers 每个数据库 用户 SQL SQL 修改列名 EXECUTE sp_rename N'dbo.tableName.OldColName', N'NewColName', 'COLUMN' SQL 关于OPENDATASOURCE 通过excel直接把数据导入数据库 EXCEL 2005 SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=NomFichier.xls;Extended Properties=EXCEL 8.0')...[Sheet1$] ; EXCEL 2007
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=NomFichier.xlsx; Extended Properties=''Excel 12.0''')...[sHEET1$] OR insert into testTable_1 ([name], [date], [money], [content]) Select [姓名], [日期], [金额], [内容] FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="C:\Book1.xls"; User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 有时候因为SQL SERVEUR的安全限制,报错为: SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online. 修改方法: EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO OR 启用AD Hoc Distributed Queries特性,执行Surface Area Configuration,选择Surface Area Configuration for features 在弹出的窗口中选择Database Engine->Ad Hoc Remote Queries,然后勾选"Enable OPENROWSET and OPENDATASOURCE support",确认即可。 SQL @@FETCH_STATUS: 返回值 描述 0 FETCH 语句成功。 -1 FETCH 语句失败或此行不在结果集中。 -2 被提取的行不存在。 关于SQL直接读取硬盘文件 SQL直接读取硬盘文件: declare @@sBulk as varchar(250) set @@sBulk = 'BULK INSERT temp FROM ''' + @@sNomFichier + ''' WITH (FIELDTERMINATOR = ''\t'', ROWTERMINATOR = ''\n'')' exec(@@sBulk) 函数datetime: 格式:YYYY-MM-DD hh:mm:ss.ms 可用FUNCTION:
SQL+vb sql server 特殊字符 例如在SQL中的特殊字符' 需要加一个' ---------> '' Replace(Unstring, " ' ", " '' ") VB中,截取字符串长度 Microsoft.VisualBasic.Left(Unstring, 3) 从左开始到第3个字符 Mid(MyString, 1, 3) 从第几个到第几个 Right(AnyString, 1) 从左右始到第1个字符 SQL 检查Table是否存在,若存在则删除 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].NomTable') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table NomTable检查View是否存在,若存在则删除 if(Object_ID('Unvue') is not null) drop view Unvue EFFICACE SQL --> Procedure stock pour économis des temp, on utilise procedure stock dans SQL Server USE [NomBase] Create procedure NomProcedure as begin code end 实习日志 VB+SQL语言 弹出流览文件窗口,需要用到的控键 OpenFileDialog 建立临时表 create table #temp() 将硬盘或软件上的文件转化成TABLE形式 BULK INSERT #temp FROM 'NomFichier.txt' WITH (FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n') FIELDTERMINATOR 为每列分割字符 ROWTERMINATOR 为每行分割字符 当我们使用BULK INSERT命令来插入数据时,不要启动目标表中的触发器,因为触发器会减缓数据导入的进程。 在下一个例子中,我们将在Sales表上创建触发器,用来打印插入到表中的记录的数量。
这里我们选择文本文件作为源数据文件,文本文件中的值通过逗号分割开。该文件包含1000条记录,而且其字段和Sales表的字段直接关联。由 于该文本文件中的值是由逗号分割开的,我们只需要指定FIELDTERMINATOR即可。注意,当下面这条语句运行时,我们刚刚创建的触发器并没有启 动: BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',') 当我们要的数据量非常大时,有时候就需要启动触发器。下面的脚本使用了FIRE_TRIGGERS选项来指明在目标表上的任何触发器都应当启动: BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS) 我们可以使用BATCHSIZE指令来设置在单个事务中可以插入到表中的记录的数量。在前一个例子中,所有的1000条记录都在同一个事务中被 插入到目标表里。下面的例子,我们将BATCHSIZE参数设置为2,也就是说要对该表执行500次独立的插入事务。这也意味着启动500次触发器,所以 将有500咯打印指令输出到屏幕上。 |
|
|