选择变量为字符串

时间:2013-04-16 13:54:48

标签: sql sql-server

有谁能告诉我为什么这不起作用?

DECLARE
  @ItemList         VARCHAR(max);

IF EXISTS
    (SELECT IM_Data INTO ItemList
      FROM IM_DataTable
      WHERE xRowNum<=1)

错误:

  

查找错误 - SQL Server数据库错误:关键字“INTO”附近的语法不正确。

4 个答案:

答案 0 :(得分:5)

好的,首先,您需要确保查询结果只有一行,因此我认为不需要WHERE xRowNum<=1,您应该使用xRowNum=1

DECLARE @ItemList VARCHAR(max);

SELECT @ItemList = IM_Data
FROM IM_DataTable
WHERE xRowNum = 1

答案 1 :(得分:1)

我认为它期望ItemList成为一个表 - 你选择INTO一个表,而不是一个变量。

SQL Server中的语法是:

SELECT 
   ItemList = IM_Data
FROM 
   IM_DataTable
WHERE
   xRowNum<=1

我不确定IF EXISTS是如何适应的。您只想在数据存在的情况下设置变量吗?

答案 2 :(得分:0)

您已经离开了需要位于变量名称开头的@符号。此外,您似乎将语法混合在一起以检查是否存在以及将数据检索到变量中的语法。您是否只想检查IN_DataTable中是否存在某一行?如果是这样,请省略“INTO @ItemList”,以便您拥有以下内容:

IF EXISTS 
    (SELECT IM_Data
     FROM IN_DataTable
     WHERE xRowNum <= 1)
...

如果你需要检索IM_Data并在以后使用它,你应该这样做:

DECLARE @ItemList VARCHAR(max);
SELECT @ItemList = IM_Data 
FROM IM_DataTable
WHERE xRowNum<=1;
...

答案 3 :(得分:0)

为什么这不起作用?

嗯,你拥有的子查询是:

SELECT IM_Data
INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1

这是在当前数据库中创建名为ItemList的表的完全有效的语法。但是,if语句中不允许使用此语法。

所以你可以这样说:

SELECT IM_Data
INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1

if exists (select * from itemlist)

或者你可以完全免除额外的桌子:

if exists (select * from IM_DataTable WHERE xRowNum<=1)

或者,你可能还有其他一些意图。