日期:2014-05-18  浏览次数:20664 次

SQL 存储过程中的赋值
SQL code

CREATE PROCEDURE AA
(
   @PAGE INT,
   @CURRENT INT
)
DECLARE @STR NVARCHAR(1000)
IF (PAGE='1')
  IF (CURRENT='0')
     STR='SELECT * FROM TABLE'
EXEC sp_executesql @STR


在TABLE存在,并有内容的情况下,为什么运行后,得不到内容,而在此情况下

SQL code

CREATE PROCEDURE AA
(
   @PAGE INT,
   @CURRENT INT
)
DECLARE @STR NVARCHAR(1000)
SET @STR='SELECT * FROM TABLE2'
IF (PAGE='1')
  IF (CURRENT='0')
     STR='SELECT * FROM TABLE'
EXEC sp_executesql @STR


却能得到TABLE2的内容,小弟不是很了解SQL的变量的赋值和作用域(我想问题是发生在这里面吧),请大家解答

------解决方案--------------------
SQL code


CREATE PROCEDURE AA
   @PAGE INT,
   @CURRENT INT
as
DECLARE @STR NVARCHAR(1000)
SET @STR='SELECT * FROM TABLE2'
IF (@PAGE='1')
  IF (@CURRENT='0')
     @STR='SELECT * FROM TABLE'
EXEC sp_executesql @STR

------解决方案--------------------
变量名必须以@开头,这是规定.
@@开头是全局
@开头是局部
------解决方案--------------------
SQL code
CREATE PROCEDURE AA
(
   @PAGE INT,
   @CURRENT INT
)
AS
DECLARE @STR NVARCHAR(1000)
IF (PAGE='1') and (CURRENT='0')
    set @STR='SELECT * FROM TABLE'
else 
    set @STR='SELECT * FROM TABLE2'
EXEC sp_executesql @STR