存档

‘MS Sql Server’ 分类的存档

Sql Server2005 作业下DateAdd函数使用注意

2009年11月23日 Johnny Woo 2 条评论

如下的语句

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),DATEADD("d",-1,GETDATE()),121);

在SQL SERVER查询分析器内执行正确通过
但是写入SQL作业后,报错
“为 dateadd 指定的参数 1 无效”
根据报错分析到是在dateadd的”d”参数这里有问题
看了下网上的资料.
都说第一个参数是字符串型,内容是”d”或者”y”之类的选项
始终不得其解.后来查阅DATEDIFF的时候到了MSDN上
顺便看下官方的说明
结果发现第一项其实不需要用双引号
datepart | 缩写
year | yy, yyyy
将以上语句替换成

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),DATEADD(d,-1,GETDATE()),121);

作业执行通过.
可能在查询分析器内做了更多的容错工作.所以此函数可通过,但是作业的实现是稍有差别的.

PS:
其实上面语句还可以用

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),GETDATE()-1,121);

来代替
执行效率没试过,可能相差无几.

教训:
烂文档不如无文档.网上的文档果然不能轻信.还是去官方看比较稳妥.

分类: MS Sql Server 标签:

Sql语句优化注意

2009年10月27日 Johnny Woo 3 条评论

1.尽量不要对列名进行函数处理.而是针对后面的值进行处理
例如where col1 = -5的效率比where -col1=5的效率要高
因为后面的条件对列值进行了计算.这样的条件下优化器无法使用索引
而是要针对所有值进行计算之后才能再比较

2.尽量使用和数剧列一样的值进行操作
如果col1是数值型
那么例如where col1 = 2和where col1= ’2′
则前者效率更高
因为比较字符和数值型的时候
引擎需要把两者都转化成双精度然后进行比较
这样col1上的索引就失去作用了

3.减少函数的使用
例如where col1 >= ’2009-10-26′ and col1 <= ’2009-10-27′
和where datediff(day,col1,getdate())=0
后者因为用到函数处理.所以col1上的索引又无法使用了

4.尽量不要用OR
一般对于OR的条件
优化器一般会使用全表扫描

分类: MS Sql Server, MySQL 标签:

Sql Server一些转移数据相关内容

2009年10月13日 Johnny Woo 没有评论

jobs的东西保存在msdb里面
link server的东西保存在master里面
但是master每个服务器有不同的加密key
所以导入的link server的远程用户验证的密码转移之后就不行了.

分类: MS Sql Server 标签:

恢复sql server的master库

2009年10月12日 Johnny Woo 没有评论

首先进入单用户模式
sqlservr.exe -m

恢复的顺序
master->msdb->model

运行sqlcmd
1>RESTORE DATABASE [master] FROM
DISK = N’G:\data\master.bak’ WITH FILE = 1,
NOUNLOAD, REPLACE, STATS = 10
2>GO

注意,sql server的版本要一致

分类: MS Sql Server 标签:

[转载]windows 2003 x64下安装x86 Sql 2005报错解决

2009年10月10日 Johnny Woo 1 条评论

无法在com+目录中安装和配置程序集 错误:-2146233087

无法在com+目录中安装和配置程序集c:\program files\Microsoft SQL Server\90\DTS\tasks\microsoft.sqlserver.MSMQTASK.DLL.
错误:-2146233087

sql server 安装时“无法在COM+目录中安装和配置程序”的解决办法2008-05-17 13:08无法在COM+目录中安装和配置程序集,C:\program files\microsoft SQL Server\90

\NotificationServices\9.0.242\Bin\microsoft.sqlserver,notificationservices.dll。错误:-

2146233087
错误消息:Unknown error 0×80131501
错误说明:事务管理器可用。(异常来自HRESULT:0x8004D01B)

【解决办法】
这时候可以暂停安装,不要点击中止、忽略,也不要点击取消
按以下步骤
1.删除注册表中的键:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
\HKEY_CLASSES_ROOT\CID
2、使用cmd执行 停止MSDTC服务:net stop msdtc
3、使用cmd执行 卸载MSDTC服务:msdtc -uninstall
4、使用cmd执行 重新安装MSDTC服务:msdtc -install

分类: MS Sql Server 标签:

[收藏]Server 'myserver' is not configured for RPC

2009年7月17日 admin 没有评论

Server ‘myserver’ is not configured for RPC

Problem: On a Microsoft SQL Server 2005 installation with a linked server configured to “myserver” (which happens to be 2000), execution of a remote stored procedure (EXEC myserver.mydatabase.dbo.mysproc) fails with error:

Msg 7411, Level 16, State 1, Line 1
Server ‘psp6new’ is not configured for RPC.
Solution: Problem is most likely that RPC is not configured for your linked server. That is not a default option, after all. You can see what settings are configured with exec sp_helpserver.

If ‘rpc,rpc out’ is not in your results, then the the linked server isn’t configured for RPC. To do so:

exec sp_serveroption @server=’myserver’, @optname=’rpc’, @optvalue=’true’
exec sp_serveroption @server=’myserver’, @optname=’rpc out’, @optvalue=’true’

分类: MS Sql Server 标签:

[收藏]MSSQL数据库变为单用户问题解决

2009年7月17日 Johnny Woo 2 条评论
下载: code.txt
  1. USE master;
  2. GO
  3. DECLARE @SQL VARCHAR(MAX);
  4. SET @SQL=''
  5. SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)
  6. FROM master..sysprocesses
  7. WHERE dbid=DB_ID('WebMedia7');
  8.  
  9. EXEC(@SQL);
  10.  
  11. GO
  12.  
  13. ALTER DATABASE WebMedia7 SET MULTIUSER;
分类: MS Sql Server 标签: