表格atest的内容如下:希望能够执行表格atest里边的select语句,写了:exec('exec(''select * from atest'')'),但是仅仅是执行select * from atest ,没法执行select * from ipdata。问题1、怎么能够一次执行查找出来的select语句;
问题2、假设select * from atest出来的语句是超过8000个字符,又该怎么执行sql嵌套
问题2、假设select * from atest出来的语句是超过8000个字符,又该怎么执行sql嵌套
解决方案 »
- provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified
- 插入转换语句
- update、insert into这种语句是否默认就是行级排他?
- 求一个SQL语句
- 这样的存储过程应该怎么写呢?谢谢?
- 有个很纠结的字符串识别问题,这方面不是很懂,请教下高手
- 知道值,不知道表名,也不知道字段名,怎么查找?
- 急急急!!高手帮忙!高分相赠
- SQL Server 中的"触发器"或者"存储过程"是否可以执行一个EXE文件?
- 有分加。急!急!急!(VC++)
- SQL Server中的复写已删除,但复写监视器中的一直都在,急
- 急~~~~~~~~~~mysql中update语句中如何更新变量,给变量赋值
declare @tsql varchar(8000)select @tsql=sel from atestexec(@tsql)
insert into test values('select * from 表名')declare @sql nvarchar(1000),@s nvarchar(1000)
set @sql = N'select @s=al from test'
exec sp_executesql @sql,N'@s nvarchar(1000) output',@s output
exec (@s)
INSERT ipdata SELECT 1
CREATE TABLE temp(sel NVARCHAR(max))
INSERT temp
SELECT 'select * from ipdata' UNION ALL
SELECT 'select * from ipdata'--#1.
DECLARE @sql NVARCHAR(MAX) --突破8000限制
SET @sql = N''
SELECT @sql = @sql + sel+ CAST(';' AS NVARCHAR(MAX)) FROM temp
EXEC(@sql)--#2.
DECLARE @sql NVARCHAR(MAX) --突破8000限制
SET @sql = N''
SELECT @sql = @sql + 'EXEC(''' + sel+ CAST(''');' AS NVARCHAR(MAX)) FROM temp
EXEC(@SQL)
EXEC(@sql_1+@sql_2)
declare @tsql1 varchar(8000),@tsql2 varchar(8000)
select @tsql1=left(sel,8000),
@tsql2=substring(sel,8001,8000)
from atest
exec(@tsql1+@tsql2)
--超过8000用下边这个,max 就可以了。
DECLARE @sql NVARCHAR(MAX)
SQL SERVER 2005及以上,用NVARCHAR(MAX), 2^31-1 个字节。只不过用时,注意一下细节:
DECLARE @test NVARCHAR(max)
SET @test = REPLICATE(N'我', 80001)
SELECT LEN(@test) --4000SET @test = REPLICATE(CAST(N'我' AS NVARCHAR(max)), 800000)
SELECT LEN(@test) --800000
SQL SERVER 2005及以上,用NVARCHAR(MAX), 2^31-1 个字节。只不过用时,注意一下细节:
DECLARE @test NVARCHAR(max)
SET @test = REPLICATE(N'我', 80001)
SELECT LEN(@test) --4000SET @test = REPLICATE(CAST(N'我' AS NVARCHAR(max)), 800000)
SELECT LEN(@test) --800000
我试了下,
declare @sql nvarchar(max)
declare @len int
select @sql=isnull(@sql + ' union all ','') + ' select * from ' + name from sysobjects where [name] like 'abc%'
set @len=len(@sql)
print(@len)
print(@sql)
GO出来的数据长度len=43137,后面的语句截断了,不是一个完整的语句,我是哪里写漏了吗
declare @tsql1 varchar(8000),@tsql2 varchar(8000)
select @tsql1=left(sel,8000),
@tsql2=substring(sel,8001,8000)
from atest
exec(@tsql1+@tsql2)
整个语句窜起来是89101的字符。
只是因为SQL SERVER不支持显示太多的字符。
只是因为SQL SERVER不支持显示太多的字符。意思是语句是正确的,只是显示的时候只显示一半吗
超过8千就不要用字符串存储了啊,BLOB吧,用的时候下载本地再解译
只是因为SQL SERVER不支持显示太多的字符。意思是语句是正确的,只是显示的时候只显示一半吗这个确实是对的,sql server 显示结果的字符串有限制为65535个,采用len的时候就可以发现其实句子是完整的。非常感谢,散分咯