我正在尝试编写一个过程来检查表中的所有行,如果B
那么我需要在表中插入一个新行。我已经生成了这个脚本,但是当我尝试执行它时出现错误
第15行,第15行,第1行,第33行 关键字“选择”附近的语法不正确。
如何改变它以成为有效的t-sql,或者什么是更合适的方法来实现我想要的结果?样本DDL如下:
A = pd.DataFrame(range(3), columns=['dataA'], index=['A0', 'A1', 'A2'])
print A
dataA
A0 0
A1 1
A2 2
mindex = pd.MultiIndex.from_tuples([
('A0', 'B0'), ('A0', 'B1'), ('A1', 'B0'),
('A2', 'B0'), ('A2', 'B1'), ('A2', 'B3')])
B = pd.DataFrame(range(6), columns=['dataB'], index=mindex)
print B
dataB
A0 B0 0
B1 1
A1 B0 2
A2 B0 3
B1 4
B3 5
A = construct_position_indexes(A, B)
print A
dataA start_index end_index
A0 0 0 2
A1 1 2 3
A2 2 3 6
C = A.iloc[[0, 2], :]
print C
dataA start_index end_index
A0 0 0 2
A2 2 3 6
print get_slice(B, C)
dataB
A0 B0 0
B1 1
A2 B0 3
B1 4
B3 5
答案 0 :(得分:3)
首先,while循环中的插入查询不正确。
Insert Into #Items (itemID, itemName, qty, storeID) Values
Select @storeID, 'CC200', 'Coca-Cola Syrup', @Qty, @storeID FROM #NeedExtra
没有像Insert into ... values select
这样的语法,插入的列数不匹配。
如果正确,值为@storeID, 'CC200', 'Coca-Cola Syrup', @Qty, @storeID
的项目将重复多次,等于#NeedExtra
的计数。
正确的查询将是
Insert Into #Items (itemID, itemName, qty, storeID) Values
('CC200', 'Coca-Cola Syrup', @Qty, @storeID)
其次,您应该避免使用CURSOR
并通过此插入查询更改CURSOR
循环。
Insert Into @Items (itemID, itemName, qty, storeID)
Select 'CC200', 'Coca-Cola Syrup', t.Qty, t.storeID
FROM @Items t WHERE t.itemID = 'CC100'
答案 1 :(得分:0)
INSERT INTO SELECT
的正确语法不使用values
关键字。因此,只需从过程的第33行中删除Values
关键字。
答案 2 :(得分:0)
我修改了你的代码,现在应该工作。
--Create Holding Table
Declare @Items As Table
(
itemID varchar(20)
,itemName varchar(100)
,qty int
,storeID int
)
--Insert Some Sample Data
Insert Into @Items (itemID, itemName, qty, storeID) Values
('CZ100', 'Coke Zero', 4, 123), ('CZ100', 'Coke Zero', 3, 201)
,('CZ200', 'Cherry Coke Zero', 4, 311), ('CC100', 'Coca-Cola', 6, 400)
,('CC100', 'Coca-COla', 8, 500)
--Select data that needs to be split into secondary table
Select storeID, Qty Into #NeedExtra from @Items WHERE itemID = 'CC100'
--Declare variables
Declare @storeID int, @Qty int
--Create Cursor
DECLARE cursor1 CURSOR FOR
--Select statement to insert into variables
SELECT
storeID, qty
FROM #NeedExtra
OPEN cursor1
--Iterate cursor
FETCH NEXT FROM cursor1 INTO @storeID, @qty
--Continue as long as cursor is not empty
WHILE @@FETCH_STATUS = 0
BEGIN
--Insert Values
Insert Into @Items (itemID, itemName, qty, storeID)
Select 'CC200', 'Coca-Cola Syrup', @Qty, @storeID FROM #NeedExtra
--Grab next item from temp table
FETCH NEXT FROM cursor1 INTO @storeID, @qty
END
--Close cursor
CLOSE cursor1
--Deallocate cursor
DEALLOCATE cursor1
--Select statements
Select * FROM #NeedExtra
SELECT * FROM @Items