【问题标题】:Execute a SQL Statement that Returns a Single Value执行返回单个值的 SQL 语句
【发布时间】:2015-03-12 09:37:47
【问题描述】:

我有一个这样的 SQL 选择语句:

 SET @list = 'TEST,TEST1'
 SET @Delimiter = ',';
 SET @list =  @list + @Delimiter;

 SET @listIndexTemp = CHARINDEX(',',@list);  
 WHILE(@listIndexTemp > 0)
 BEGIN
    SET @listTemp = SUBSTRING(@list, 1,  @listIndexTemp -1);
    DECLARE @string VARCHAR(MAX)

    SET @string = 'SET @listTempUid = SELECT id FROM ['+CAST(@database as varchar(50))+'].[dbo].[MAIN] WHERE [name] = '''+CAST(@listTemp as varchar(100))+'''';
    EXEC (@string);

    INSERT INTO #Roles (uid, name) VALUES(@listTempUid, @listTemp);

    SET @list = SUBSTRING(@list, @listIndexTemp+1,  LEN(@list));
    SET @listIndexTemp = CHARINDEX(',',@list);

 END

就我而言,上述查询处于循环中。因此,我必须将上述查询语句“字符串”的返回值分配给每次迭代的 SQL 变量“listTempUid”。

上述查询无效。我必须将 id 和 name 添加到输入列表中相应名称的临时表中。

请帮忙

【问题讨论】:

  • 可以在这里发布您的程序。
  • 更新了代码。希望你能理解!
  • 那你想要什么?
  • 上述查询无效。

标签: sql sql-server sql-server-2008 subquery


【解决方案1】:

这可以通过使用EXECUTE SP_EXECUTESQL 而不是EXEC 来实现。要使用SP_EXECUTESQL,您需要声明@string as NVACHAR。在动态查询中,您必须使用SELECT 而不是SET 语句来赋值。要从 Dynamic Query 中获取价值,您必须使用 OUT 参数。

试试这样的。

 SET @list = 'TEST,TEST1'
 SET @Delimiter = ',';
 SET @list =  @list + @Delimiter;

 SET @listIndexTemp = CHARINDEX(',',@list);
 WHILE(@listIndexTemp > 0)
 BEGIN
    SET @listTemp = SUBSTRING(@list, 1,  @listIndexTemp -1);

    DECLARE @string NVARCHAR(MAX)

        SET @string = 'SELECT @TempID = id FROM ['+CAST(@database as
           varchar(50))+'].[dbo].[MAIN] WHERE [name] = '''+CAST(@listTemp as
           varchar(100))+'''';

            EXECUTE SP_EXECUTESQL @string, N'@TempID INT OUT', @listTempUid OUT

    INSERT INTO #Roles (uid, role) VALUES(@listTempUid, @listTemp);

    SET @list = SUBSTRING(@list, @listIndexTemp+1,  LEN(@list));
    SET @listIndexTemp = CHARINDEX(',',@list);

 END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多