Sql语句中的select语句。在ms sql server中。对变量赋值

为了动态地取得一个值供其他sql语句使用,往往需要定义一个变量。而在网上查到的方法是:先定义@name,然后 如 select @name =name from table 1 where id =‘123’。
问题1.请问这样的方法是不是常用的,还有其他方法么?因为变量值只有一个,而select的结果可能有多个,这样(或者在取得多个name的时候)会报错么?

问题2.现在在已经写好的存储过程中的一些语句中例如(insert ..into..select..组合语句)中想加入“@name =”取得查找到的变量的值。如将 其中的insert...into...select name from table 1 where id =‘123’改为insert...into...select @name =name from table 1 where id =‘123’。会影响原来的这些语句发挥的作用么?

问题一:
可以定义局部变量,也可以用存储过程。
局部变量:
声明:DECLARE@变量名 类型
赋值:SET@变量名=值 或 SELECT@变量名=值
select @name =name from table 1 where id =‘123’,如果结果有多个,一般要对这些结果进行处理,用if else或者case when。应该不会报错
问题二:
不会影响。
存储过程:

Create procedure 名
@参数1 数据类型=默认值[output] 默认[input]
···
@参数1 数据类型=默认值[output]
As
Begin
Sql语句
End
select @name =name from table 1 where id =‘123’可以为变量赋值,正常。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-07
问题1:这句式是常用的,如果给变量赋的值不是单一而是结果集的话
只会赋值最后一条数据,不会报错;通常如果要一条一条的赋值来执行其他操作的话
是要用到游标的
问题2:你想的语句是错误的,因为select @name =name from table 1 where id =‘123’
只是赋值语句,而不是真正意义上的查询语句,所以语句将不会执行本回答被提问者采纳
第2个回答  2012-08-14
1.
不会报错,会给你所有的结果。如果想更明确的话可以在加一个条件,例如
select name from table 1 where id='123' and email='[email protected]'

2.
应该不会,实话说我没用过@name=name这写法
相似回答