在SQL Server中使用NewID()方法产生随机集
例如考试系统中的随机出题
刚开始想到的是Random类
但是Random效率有点低
后来想到了在数据库里的newid()
于是采用了下边方法:
select top 5 * from tablename order by newid()
在此标记一下 ......
CREATE PROCEDURE dbo.UspOutputData
@tablename sysname
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int
set nocount on
set @objectId=object_id(@tablename)
if @objectId is null -- 判断对象是否存在
begin
print 'The object not exists'
return
end
set @objectname=rtrim(object_name(@objectId))
if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end
if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
begin
print 'The object is not table'
return
end
select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80
if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' ON'
declare syscolumns_cursor cursor
for select c.name,c.xtype from syscolumn ......
使用子查询的原则
1.一个子查询必须放在圆括号中。
2.将子查询放在比较条件的右边以增加可读性。
子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,
并且如果指定了它就必须放在主 SELECT 语句的最后。
ORDER BY 子句可以使用,并且在进行 Top-N 分析时是必须的。
3.在子查询中可以使用两种比较条件:单行运算符和多行运算符。
子查询的类型
单行子查询:从内 SELECT 语句只返回一行的查询
多行子查询:从内 SELECT 语句返回多行的查询
单行子查询
单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。幻灯片中列出了单行操作符。
例
......
大家打开这个链接可以看到很多数据库的连接方法。http://www.connectionstrings.com
这些数据库之间的数据交换就是这个贴子所要总结的内容。
(一)SQL Server之间
把远程数据库中的数据导入到本地数据库。
http://community.csdn.net/Expert/topic/5079/5079649.xml?temp=.7512018
http://community.csdn.net/Expert/topic/5011/5011278.xml?temp=.1658899
http://community.csdn.net/Expert/topic/4982/4982625.xml?temp=.8189966
把A库里的其中几个表和视图导入B库
http://community.csdn.net/Expert/topic/5042/5042648.xml?temp=.2556574
sql2005的数据库导入sql2000中
http://community.csdn.net/Expert/topic/4954/4954820.xml?temp=.3408625
在SQL2005中 如何导入 SQL2000中的Analysis Service ?
http://community.csdn.net/Expert/topic/4713/4713032.xml?temp=2.752322E-02
英文版sql server2005中bcp导出中文乱码问题
http://community.csdn.net/Expert/topic/5024/5024662.xml?temp=.7404596
如何将一个由SQL保存出来的*.bas文件再导回到SQL中
http://community.csdn.net/Expert/topic/4944/4944630.xml?temp=.8225672
(二)SQL Server --> ......
SQL数据库中用image来存储文件,但SQL没有提供直接的存取文件的命令.
/*--bcp 实现二进制文件的导入导出
支持image,text,ntext字段的导入/导出
image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等
text,ntext适合于文本数据文件
注意:导入时,将覆盖满足条件的所有行
导出时,将把所有满足条件的行导出到指定文件中
此存储过程仅用bcp实现
-----------------*/
/*--调用示例
--数据导出
exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat'
--数据导入
exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_binaryIO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_binaryIO]
GO
Create proc p_binaryIO
@servename varchar (30),--服务器名称
@username varchar (30), --用户名
@password varchar (30), --密码
@tbname varchar (500), --数据库..表名
@fdname varchar (30), --字段名
@fname varchar (1000), --目录+文 ......
比较两个SQL的执行时间
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PROC_SQL_COMP]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PROC_SQL_COMP]
GO
/*--测试两组SQL的平均时间
利用osql.exe来测试两组 SQL 语句的执行时间
测试的存储过程中,调用了事务处理,所以如果测试的SQL语句有数据修改行为
会在调用结束后自动回滚事务,确保测试不会修改数据
已知的问题:
1.由于 osql 调用不允许使用多行,所以存储过程中会把回车换行替换成空格
对于 SQL 字符串中的回车换行,一样会被替换,所以对于字符串中包含回
车换行的 SQL 语句,可能会产生问题,除非回车换行不对 SQL 语句产生影响
2.由于是调用 xp_cmdshell 来执行 osql,所以要求有系统管理员的权限(比如sa)
3.调用 osql 使用了windows身份验证,这样省去了指定用户名及密码的麻烦
但如果你的 sql server 禁用了windows身份验证,则需要修改存储过程的 osql 调用
--邹建 2004.08(引用请保留此信息)--*/
/*--调用示例
exec dbo.PROC_SQL_COMP
  ......