如下的语句
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);
来代替
执行效率没试过,可能相差无几.
教训:
烂文档不如无文档.网上的文档果然不能轻信.还是去官方看比较稳妥.
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的条件
优化器一般会使用全表扫描
jobs的东西保存在msdb里面
link server的东西保存在master里面
但是master每个服务器有不同的加密key
所以导入的link server的远程用户验证的密码转移之后就不行了.
首先进入单用户模式
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的版本要一致
无法在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
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’
近期评论