master..xp_cmdshell 'bcp "select * from table where a = '123456' or a='5456' or a='1566' or a='782'" queryout d:\aa.txt -c -S 192.168.0.1 -U sa -P sa以上语句可以正常导出记录集,但是当select语句很长时(假设后面有10000条or语句),则bcp就不能正常工作了,提示varchar的参数不对,我估计是不已经超过了varchar的最大值8000了,但是我的sql语句必须这样写的很长,请问各位大侠,应该如何解决这个问题?
我的select语句每时每刻都是动态生成的,查询量很大,怎么建立视图?
create view....
你的意思是把select语句建立成为视图?
我的select语句每时每刻都是动态生成的,查询量很大,怎么建立视图?
使用openrowset方式把动态语句的结果建为视图
USE tmp
CREATE PROC P
AS
BEGIN
SELECT 1 ID
ENDCREATE VIEW v
AS
SELECT * FROM OPENROWSET('SQLOLEDB','(local)';'sa';'password','EXEC tmp.dbo.p') a
这样就可以了
存储过程的参数好像没用办法接收大于varchar(8000)的字符,我的动态语句远远大于这个值
请指教
-------------------------------------------------------------------------------
master..xp_cmdshell 'bcp "exec [库名].dbo.data_statistics ''2005-5-1'',''2006-10-31''" queryout "d:\ff.xls" -c -q -U"sa" -P"654321"'
create #t(a varchar(255))insert #t ..1
insert #t ..2
insert #t ..3
...
insert #t ..n然后join一下:
master..xp_cmdshell 'bcp "select * from table, #t where #t.a = table.a" queryout d:\aa.txt -c -S 192.168.0.1 -U sa -P sa
用master..xp_cmdshell 'bcp "select * from table where a in (select b from aaa)" queryout d:\aa.txt -c -S 192.168.0.1 -U sa -P sa你说你的条件是每次都变的,那也容易,每次做这个操作之前先用truncate table清空表,再把条件插入即可
那如何改善用or连接的效率问题,有么更好的可行办法?
用 charindex可以让你的语句稍变短一点.
也可以将or 改为 内连接的方式.
用in关键字确实收到了很好的效果,谢谢
2nd one:It will be fine in SQL2005
3rd :i think if u create a view for temp using it's a good way
For ur reference