+ -
当前位置:首页 → 问答吧 → 如何同时声明@state,@name二个变量?

如何同时声明@state,@name二个变量?

时间:2011-11-19

来源:互联网

set @sql = 'select @state=user_state, @name=user_name from user_list where user_id='+rtrim(@id)


上边这句sql如何同时声明@state,@name二个变量呢?

作者: postfix2   发布时间: 2011-11-19

这样是不可以的。

作者: fredrickhu   发布时间: 2011-11-19


roy_88
(中國風)

等 级:
3
3
更多勋章
===============================
再次谢谢中国风,方法5可行

--方法5:输入输出

--用sp_executesql
declare @i int,@con int,@s nvarchar(1000)
set @i=5
select @s='select @con=count(1) from sysobjects where ID>@i'
exec sp_executesql @s,N'@con int output,@i int',@con output ,@i 
select @con

作者: postfix2   发布时间: 2011-11-19

请中国风进来接分哈,谢谢!

作者: postfix2   发布时间: 2011-11-19

我擦,Roy难道是千里传音?
没见回答就解决了?

作者: xiaolinyouni   发布时间: 2011-11-19

引用 3 楼 postfix2 的回复:
请中国风进来接分哈,谢谢!

那个是输出参数?原来是这个意思。

作者: fredrickhu   发布时间: 2011-11-19

SQL code
输入或输出参数

      (1)输入参数:
          declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @input_id int--定义需传入动态语句的参数的值

          set @QueryString='select * from tablename  where id=@id'  --id为字段名,@id为要传入的参数
          set @paramstring='@id int' --设置动态语句中参数的定义的字符串
          set @input_id =1  --设置需传入动态语句的参数的值为1
          exec sp_executesql @querystring,@paramstring,@id=@input_id  
          若有多个参数:
          declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
          declare @input_id int--定义需传入动态语句的参数的值,参数1
          declare @input_name varchar(20)--定义需传入动态语句的参数的值,参数2

          set @QueryString='select * from tablename  where id=@id and name=@name'   --id与name为字段名,@id与@name为要传入的参数
          set @paramstring='@id int,@name varchar(20)' --设置动态语句中参数的定义的字符串,多个参数用","隔开
          set @input_id =1  --设置需传入动态语句的参数的值为1
          set @input_name='张三'   --设置需传入动态语句的参数的值为"张三"
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序
     (2)输出参数
             declare @num int, @sqls nvarchar(4000) 
            set @sqls='select count(*) from tableName' 
            exec(@sqls) 
        --如何将exec执行结果放入变量中?          
        declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        declare @output_result int--查询结果赋给@output_result 

        set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 为输出结果参数
        set @paramstring='@totalcount int output' --设置动态语句中参数的定义的字符串,多个参数用","隔开
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        select @output_result
        当然,输入与输出参数可以一起使用,大家可以自己去试一试。
        另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法.
        IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
            drop table #tmp
        select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同

        declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
        set @QueryString='select * from tablename '
        insert into #tmp(field1,field2,...) exec(@querystirng) 

作者: fredrickhu   发布时间: 2011-11-19

在上一贴已回复过了

作者: roy_88   发布时间: 2011-11-19

热门下载

更多