有没有办法在SQL查询中使用可变长度占位符?
现在有一个3元组,我写这样的东西:
c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup)
Run Code Online (Sandbox Code Playgroud)
但是,如果tup可以有不同的长度,也许是4元组或2元组怎么办?在这种情况下是否有使用占位符的语法?如果没有,编写代码的首选方法是什么?
这些陈述中的一个不应该起作用而且一个失败吗?
直觉说语句2应该失败,因为在int之后有一个逗号而没有列出第二列.
然而,在最后一列数据类型之后,工作和尾随逗号","都没有区别.
-- Statement 1
CREATE TABLE dbo.MyTable1( col1 int);
-- Statement 2
CREATE TABLE dbo.MyTable2( col1 int,);
Run Code Online (Sandbox Code Playgroud)
然而(这是预期的):在最后一个字段之后的两个逗号",,"确实导致失败:
-- Statement 3
CREATE TABLE dbo.MyTable3( col1 int,,);
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.
Run Code Online (Sandbox Code Playgroud)
测试显示它不仅仅是允许通过的最后一个字段之后的任何字符.例如,这失败了:
-- Statement 3
CREATE TABLE dbo.MyTable3( col1 int ~);
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '~'.
Run Code Online (Sandbox Code Playgroud)
也许SQL Server正在"为桌子保留席位"?主键可能呢?我真的不知道.
我使用的是Microsoft SQL Server 2008 R2(SP1) - 10.50.2500.0(X64).
这是我的更新声明,完美无缺.如果表1和表2包含相同的序列号,则表1更新为是,如果不是,则更新为否.
UPDATE dbo.table1
SET [Match] = CASE WHEN dbo.table2.[Serial Number] IS NOT NULL
THEN 'yes' ELSE 'no' END
FROM dbo.table1 LEFT OUTER JOIN dbo.table2
ON dbo.table2.[Serial Number] = dbo.table1.[Serial Number]
AND dbo.table1.[Date] = 'JAN11' AND
dbo.table1.[Install] = 'new' AND
dbo.table2.[Date] = 'JAN11' AND
dbo.table2.[Install] = 'new'
Run Code Online (Sandbox Code Playgroud)
问题是目前表1中未被调用的所有内容也都更新为否所以我想要做的是先调用一个select语句...这样的事情
select * from table1 where [Date] = 'JAN11' AND [Install] = 'new'
Run Code Online (Sandbox Code Playgroud)
并将其嵌套在更新中,以便仅使用no或yes更新相关列...