使用临时变量的SQL Server查询

使用临时变量的SQL Server查询,sql,sql-server,variables,cursor,Sql,Sql Server,Variables,Cursor,我想通过使用临时变量来使用这段代码,请建议 试试这个 SELECT ID, IIF(LEN(Name)<=5,Name+'_'+CAST(LEN(Name) AS VARCHAR(10)) ,Name) As Name, Age FROM ( SELECT 1 ID,'Abccd' Name, 23 Age UNION ALL SELECT 2 ID,'Abccderdf' Name, 42 Age UNION ALL SELECT 3 ID,'Abccd' Na

我想通过使用临时变量来使用这段代码,请建议

试试这个

SELECT ID,
      IIF(LEN(Name)<=5,Name+'_'+CAST(LEN(Name) AS VARCHAR(10)) ,Name) As Name,
      Age
 FROM
(
SELECT 1 ID,'Abccd' Name, 23 Age UNION ALL
SELECT 2 ID,'Abccderdf' Name, 42 Age UNION ALL
SELECT 3 ID,'Abccd' Name, 64 Age 

)dt
试试这个

SELECT
    CASE 
       WHEN LEN(Name) <= 5 
          THEN Name + '_' + CAST(LEN(NAME) AS NVARCHAR(5))
          ELSE Name 
    END AS 'Name',
    Age
INTO 
    #Result1
FROM 
    Customers

SELECT * FROM #Result1

我想您应该使用表变量而不是临时表。以下是您编辑的代码:-

SELECT *
FROM Customers

DECLARE @name VARCHAR(50)
DECLARE @salary INT

declare  @Result1 table(Name VARCHAR(50), Salary INT)

DECLARE zxcv CURSOR FOR
    SELECT
        CASE
           WHEN LEN(Name) <= 5
              THEN CONCAT(Name, '_', LEN(Name))
              ELSE Name 
        END,
        Salary 
    FROM 
        Customers;

OPEN zxcv

FETCH NEXT FROM zxcv INTO @name, @salary;

WHILE @@FETCH_STATUS = 0 
BEGIN
    INSERT INTO @Result1 (Name, Salary)
    VALUES (@name, @salary);

    FETCH NEXT FROM zxcv INTO @name, @salary;
END

CLOSE zxcv;
DEALLOCATE zxcv;

SELECT * FROM @Result1;

这是编码的,并生成您提供的结果-您有什么问题?我知道,代码正在生成输出结果。。。但我想用临时变量打印相同的结果。。。你能帮忙吗?sameI不知道这个问题或你最后的评论是什么意思。你必须想出一种方法来描述你使用临时变量的意思。顺便说一句,我知道临时变量是什么,或者可能扩展问题来描述你试图实现的目标,而不是你不可接受的尝试。更改临时表逻辑以使用临时变量让我们知道你是否是临时变量寻找。
SELECT
    CASE 
       WHEN LEN(Name) <= 5 
          THEN Name + '_' + CAST(LEN(NAME) AS NVARCHAR(5))
          ELSE Name 
    END AS 'Name',
    Age
INTO 
    #Result1
FROM 
    Customers

SELECT * FROM #Result1
SELECT *
FROM Customers

DECLARE @name VARCHAR(50)
DECLARE @salary INT

declare  @Result1 table(Name VARCHAR(50), Salary INT)

DECLARE zxcv CURSOR FOR
    SELECT
        CASE
           WHEN LEN(Name) <= 5
              THEN CONCAT(Name, '_', LEN(Name))
              ELSE Name 
        END,
        Salary 
    FROM 
        Customers;

OPEN zxcv

FETCH NEXT FROM zxcv INTO @name, @salary;

WHILE @@FETCH_STATUS = 0 
BEGIN
    INSERT INTO @Result1 (Name, Salary)
    VALUES (@name, @salary);

    FETCH NEXT FROM zxcv INTO @name, @salary;
END

CLOSE zxcv;
DEALLOCATE zxcv;

SELECT * FROM @Result1;