Sql 有没有办法安全地运行SELECT?
我有一个脚本,可以在表中运行SELECT。据我所知,没有其他过程可能同时引用/修改此表。但是,偶尔会出现以下错误: 创建目标表后,架构已更改。重新运行选择程序 我开始质疑 什么会导致此错误?如何避免此错误 我在谷歌上搜索了一下,建议如果没有一些疯狂的尝试-捕获-重试逻辑,就不能安全地使用SELECT INTO。真的是这样吗Sql 有没有办法安全地运行SELECT?,sql,sql-server,select-into,Sql,Sql Server,Select Into,我有一个脚本,可以在表中运行SELECT。据我所知,没有其他过程可能同时引用/修改此表。但是,偶尔会出现以下错误: 创建目标表后,架构已更改。重新运行选择程序 我开始质疑 什么会导致此错误?如何避免此错误 我在谷歌上搜索了一下,建议如果没有一些疯狂的尝试-捕获-重试逻辑,就不能安全地使用SELECT INTO。真的是这样吗 我使用的是SQLServer2012。除非您事先确实不知道字段和数据类型,否则我建议先创建表,然后使用Insert语句添加数据。在您的链接中,David Moutray提出了
我使用的是SQLServer2012。除非您事先确实不知道字段和数据类型,否则我建议先创建表,然后使用Insert语句添加数据。在您的链接中,David Moutray提出了同样的建议,下面是他的示例代码:
CREATE TABLE #TempTableY (ParticipantID INT NOT NULL);
INSERT #TempTableY (ParticipantID)
SELECT ParticipantID
FROM TableX;
看起来在你的链接中得到了全面的回答。如果您不需要重试代码,那么在源表上获取共享表锁的另一个选项呢?是否有任何原因(除了节省一两分钟写出声明外)无法使用
create table
语句显式创建表,然后使用INSERT INTO table(columns)SELECT…
?我想这会解决你的问题,SELECT。。INTO..
对于临时脚本来说是一个很好的省时方法,但是我想不出在生产代码中使用它的任何情况。虽然我可以想到在生产代码中使用它的情况,但我基本上同意Gareth的观点,如果列在开发时是未知的,那么您总是可以将其作为动态sql进行构建和执行。