Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有没有办法安全地运行SELECT?_Sql_Sql Server_Select Into - Fatal编程技术网

Sql 有没有办法安全地运行SELECT?

Sql 有没有办法安全地运行SELECT?,sql,sql-server,select-into,Sql,Sql Server,Select Into,我有一个脚本,可以在表中运行SELECT。据我所知,没有其他过程可能同时引用/修改此表。但是,偶尔会出现以下错误: 创建目标表后,架构已更改。重新运行选择程序 我开始质疑 什么会导致此错误?如何避免此错误 我在谷歌上搜索了一下,建议如果没有一些疯狂的尝试-捕获-重试逻辑,就不能安全地使用SELECT INTO。真的是这样吗 我使用的是SQLServer2012。除非您事先确实不知道字段和数据类型,否则我建议先创建表,然后使用Insert语句添加数据。在您的链接中,David Moutray提出了

我有一个脚本,可以在表中运行SELECT。据我所知,没有其他过程可能同时引用/修改此表。但是,偶尔会出现以下错误:

创建目标表后,架构已更改。重新运行选择程序 我开始质疑

什么会导致此错误?如何避免此错误

我在谷歌上搜索了一下,建议如果没有一些疯狂的尝试-捕获-重试逻辑,就不能安全地使用SELECT INTO。真的是这样吗


我使用的是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进行构建和执行。