类似的问题已经出现在这里,但似乎我的操作与其他说明中的操作相同,但不起作用。所以我有
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”?你知道怎么了吗?
答案 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}}