首页 > 编程技术 > php

未与信任SQL Server连接相关联的解决方法

发布时间:2016-11-25 16:45

建好SQL数据库,设置好了用户名与密码,连接也好了,却出现了上述问题, 原困是未设置SQL SERVER登录认证模式为混合认证模式,因为SQL SERVER默认安装后认证模式为WINDOWS认证模式,从而导致出错。
解决方法:
'www.111cn.net
启动SQLSERVER企业管理器,选择要进行认证模式设置的服务器。右击该服务器,在弹出菜单中选择属性,SQL SERVER将弹出属性对话框
sql1"
在属性对话框中选择安全性选项,在身份验证处选择“SQL Server和Windows”,然后确定。
 
sql2"

作者:zlt982001
  将表数据生成SQL脚本的存储过程:
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 -- 判 方法1:
第一步:
backup log database_name with no_log
或者 backup log database_name with truncate_only --no_log和truncate_only是在这里是同义的,随便执行哪一句都可以
第二步:
1.收缩特定数据库的所有数据和日志文件,执行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比
2.收缩一次一个特定数据库中的数据或日志文件,执行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收缩的文件的标识 (ID) 号,若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc shrinkfile 将文件大小减少到默认文件大小
两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。
方法2(这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先备份整个数据库以备不测
第二步:
备份结束后,在Query Analyzer中执行如下的语句:
exec sp_detach_db yourDBName,true --卸除这个DB在MSSQL中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在Query Analyzer中执行如下的语句:
exec sp_attach_single_file_db yourDBName,'d:mssql7datayourDBName_data.mdf'
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。
以上方法在清除log日志中均有效。
但,能否让sql server 不产生log日志呢?以上方法好像均无效。
 
我这儿正好有个case:
我客户的sql server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?
我分析了一下客户产生log日志的原因,并且做了相应测试。
客户是每天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。
比如:
SELECT * into test_2 from b_bgxx
共45000条记录,产生十几M log,如果
delete from test_2
产生80多M log ,这明显存在问题。
虽然可以换成:
truncate table test_2
但我还是希望能找到不产生log的方法。就如oracle不产生归档一样。


使用sql,和oracle数据库进行分页可以有以下三种方法!
下面让我们看一看如果我们要在数据库中取第1000条到第1010条的数据这两种方法是怎么实现的.
1. 使用临时表的方法. (在系统中主要是直接写Sql语句来做)

a) 按所需的排序方式排好序

b) 创建临时表

c) 从数据库里取出第0条 到 第1010条的数据

d) 把这些数据放入临时表中

e) 把临时表再按与 a) 相反的排序方式排好序

f) 然后只需把临时表中的前10条显时出来

g) 销毁临时表


2. 使用 object 的方法

a) 按所需的排序方式排好序

b) 从数据库里取出第0条 到 第1010条的数据

c) 倒着从这1010条数据中取10条 放入一个 object中

d) 把这个 object里的记录 完全倒置一下

e) 把 object里的数据显示出来


显然 第二种 方法优于第一种方法 它减少了系统创建, 销毁临时表所需耗费的资源, 但是它们都有一个共同的弱点. 那就是 它们都要从数据库里取出第0条 到 第1010条的数据 这样就造成了 查询出的记录数很少,但网络传输数据量很大!


因此比较好的分页做法应该是:

每次翻页的时候只从数据库里检索页面大小的块区的数据。这样虽然每次翻页都需要查询数据库,但查询出的记录数很少,网络传输数据量不大,如果使用连接池更可以略过最耗时的建立数据库连接过程。而在数据库端有各种成熟的优化技术用于提高查询速度,比在应用服务器层做缓存有效多了。


对于SqlServer 数据库 如要到得第1000-1010条记录:


Select top 10 * from (

Select top 10 * from (

Select top 1010 * from docdetail order by lastmodidate asc ,Id asc

) temptbl1 order by lastmodidate desc ,Id desc

) temptbl2 order by lastmodidate asc,Id asc

对于oracle 数据库 如要到得第1000-1010条记录 由于oracle中的rownum是在查询之后排序之前赋值的.所以其相应的写法应为:
select * from (

select my_table.*, rownum as temptbl_rownum from (
某天有个同事问我怎么在一个表中查找某字段值为null并把它替换为另一值。
开始我觉得用 select * from 表名 where 字段=null 应该可以的。
但结果是没有报错,但什么也没有显示出来。
后来又试: 
select * from 表名 where len(字段)=0 结果仍是什么也没有显示。
 
无意中,用  select * from 表名 where 字段 is null 却对了。
看来好多知识是要多试才能知道的。呵呵。


标签:[!--infotagslink--]

您可能感兴趣的文章: