
ITPUB论坛-中国的IT技术社区论坛 ≡ 大数据与 ≡ MS SQL Server EXEC 语句执行结果返回
返回列表
[笔记]EXEC 语句执行结果返回[复制链接]
guan_jh
guan_jh当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 09:46|显示全部楼层|
定义好的表达式,把值赋进去过后sqlserver exec 返回结果集,如何执行这个表达式,如何把结果返回给一个变量?
例:
declare @1 varchar(100),@2 varchar(500),@3 varchar(100)
select @1 = substring('123456789',3,len('123456789') - 3 )
select @2 = 'select top 1 ' + @1 +' into ' + @3 +'from#t'
exec(@2)
select @3
如何让@3 获得@2执行过后的结果?
exec, 语句, 定义, 表达式, 如何
stepNew
stepNew当前离线
积分
![]()

论坛徽章:
发表于 2009-4-7 10:03|显示全部楼层
#t是什么?
@3 现在是NULL 所以select @2 = 'select top 1 ' + @1 +' into ' + @3 +'from#t' 这步过后@2是NULL,所以不能得到想要的结果。
guan_jh
guan_jh当前离线
积分
![]()
论坛徽章:
楼主|发表于 2009-4-7 10:06|显示全部楼层
#t 是临时表
stepNew
stepNew当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 10:18|显示全部楼层
@2语句是NULL;
你是不是想把@1传递给@3?
declare @1 varchar(100),@3 varchar(100)
select @1 = substring('123456789',3,len('123456789') - 3 )
set @3 = @1

select @3
jingwwj5g
jingwwj5g当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 10:21|显示全部楼层
用sp_executesql
declare @1 varchar(100),@2 varchar(500),@3 varchar(100)
select @1 = substring('123456789',3,len('123456789') - 3 )
select @2 = 'select top 1 ' + @1 +' into ' + @3 +'from#t'
exec sp_executesql @2 , N'@1varchar,@3 varchar output',@1@3 output
select @3
stepNew
stepNew当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 10:23|显示全部楼层
原帖由 jingwwj5g 于 2009-4-7 10:21 发表 
用sp_executesql
declare @1 varchar(100),@2 varchar(500),@3 varchar(100)
select @1 = substring('123456789',3,len('123456789') - 3 )
select @2 = 'select top 1 ' + @1 +' into ' + @3 +'from#t'
exec sp_executesql @2 , N'@1varchar,@3 varchar output',@1@3 output
select @3
可问题是@2为NULL;没有执行的可能。
guan_jh
guan_jh当前离线
积分
![]()
论坛徽章:
楼主|发表于 2009-4-7 10:35|显示全部楼层
谢谢stepNew,,
不过select @1 = substring('123456789',3,len('123456789') - 3 ) 这一句现实中不是这样的,实际状况是表达式写在别的表里,直接取回来赋给@2,也就是说是一个隐式表达式,,,,,
jingwwj5g
jingwwj5g当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 10:52|显示全部楼层
@2是有问题sqlserver exec 返回结果集,简化一下,
declare @1 varchar(100),@2 nvarchar(500),@3 varchar(100)
select @1 = substring('123456789',3,len('123456789') - 3 )

select @2 = 'select@3 = @1'
exec sp_executesql @2 , N'@1varchar,@3 varchar output',@1,@3 output
select @3
可是,让我不解的是,为什么结果是个‘3’ 呢? 呵呵,问题导致的问题。
stepNew
stepNew当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 11:06|显示全部楼层
你的@1varchar没有长度 呵呵
jingwwj5g
jingwwj5g当前离线
积分
![]()
论坛徽章:
发表于 2009-4-7 11:21|显示全部楼层
问题是这样的,如果@1作为变量拼接时,可不指定宽度。但是输出参数需要制定长度。
declare @1 varchar(100),@2 nvarchar(500),@3 varchar(100)
set @1 = N'substring(''123456789'',3,len(''123456789'') - 3 )'
set @2 = N'select@3 ='+@1
exec sp_executesql @2 , N'@1varchar,@3 varchar(500) output',@1,@3 output
select @3
返回列表
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-120081-1.html
很对
敢于消灭一切来犯之敌
我是行星饭