使用SQL插入数据

时间:2018-10-24 14:21:34

标签: sql tsql

类似的问题已经出现在这里,但似乎我的操作与其他说明中的操作相同,但不起作用。所以我有

Declare @Counter Int

Set @Counter = 1

while @Counter <= 1000

Begin
    insert into Kiso_task_table ([Numbers],[Square_root])
     values ( @Counter, Sqrt(@Counter));
     Set @Counter = @Counter + 1;
     CONTINUE;
End 

SELECT TOP (1000) [Numbers],[Square_root]
  FROM [Kiso_task].[dbo].[Kiso_task_table] 

,它应该给我分别从1到1000的数字和它们的平方根-而是始终产生“ 1”?你知道怎么了吗?

2 个答案:

答案 0 :(得分:1)

您的方法是过程思维。尝试开始思考基于集合的。这意味着:没有CURSOR,没有WHILE,没有循环,没有这样做,然后是这个,最后是这个。让引擎知道您要返回的内容,然后让引擎决定如何执行此操作。

DECLARE @mockupTarget TABLE(Number INT, Square_root DECIMAL(12,8));

WITH TallyOnTheFly(Number) AS
(
    SELECT TOP 1000 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM master..spt_values
)
INSERT INTO @mockupTarget(Number,Square_root)
SELECT Number,SQRT(Number)
FROM TallyOnTheFly;

SELECT * FROM @mockupTarget ORDER BY Number;

提示标签将创建1000个数字的易失性集合。这被插入到一个语句中。

顺便说一句

我在我的 mockup 表上测试了您的代码,效果很好...

答案 1 :(得分:1)

您的错误是要转换平方根的变量类型,它必须是'float'类型

CREATE TABLE #Kiso_task_table
(
    [Numbers] INT,
    [Square_root] FLOAT,

);
GO

DECLARE @Counter INT

SET @Counter = 1

WHILE @Counter <= 1000
BEGIN

    INSERT INTO #Kiso_task_table ([Numbers],[Square_root]) VALUES ( @Counter, Sqrt(@Counter));
    SET @Counter = @Counter + 1
    CONTINUE
END 

SELECT TOP (1000) [Numbers],[Square_root]
FROM #Kiso_task_table

{{3}}