插入查询在 SSMS 中有效,但在 SQLCMD 中无效
Posted
技术标签:
【中文标题】插入查询在 SSMS 中有效,但在 SQLCMD 中无效【英文标题】:Insert Query Works In SSMS but not SQLCMD 【发布时间】:2020-07-10 14:14:27 【问题描述】:我有一个 SQLCMD 设置为在批处理脚本中运行:
sqlcmd -S <SQL Server Instance> -U <USER NAME> -P <PASSWORD> -i "<Path to .sql file>"
注意我需要文件路径中的引号,因为它有空格
.sql 文件是这样的。
INSERT INTO Table2 (Col1, Col2, Col3)
SELECT Col1
,Col2
,Col3
FROM Table1
当我在 Sql Server Management Studio 中执行 SQL 时,它运行良好。我在 .bat 文件中暂停了一下,它给出了消息。
消息 2714,级别 16,状态 6,服务器,第 1 行 数据库中已经有一个名为“Table2”的对象。
这是查询(当然是混淆的):
INSERT INTO Table1 (Col1, Col2,Col3,Col4,Col5,Col6)
SELECT Col1
,Col2
,Col3
,Col4
,Col5
,cast(getdate() as date) as 'Col6'
FROM OrigTable
WHERE exists(SELECT *
FROM ChkTable
WHERE DateCol > '20140101'
and OrigTable.Col1 = ChkTable.Col1)
and not exists(SELECT *
FROM Table1 inner join (SELECT max(Col6) as 'TopDate'
,Col1
FROM Table1
GROUP BY Col1) a
on Table1.Col6 = a.TopDate
and Table1.Col1 = a.Col1
WHERE Table1.Col1 = OrigTableCol1
and (Table1.Col5 = OrigTable.Col3
or isnull(Table1.Col4,1) = isnull(OrigTable.Col4,1)))
【问题讨论】:
“类似这样的东西”还不够好。显示在这两种情况下运行的完整、准确的代码。insert
语句不能引发有关尝试创建表的错误。所以在这种情况下你必须运行其他东西。
要么你的 sql 更像select ... into Table2 from ...
,要么你的 sql 文件(在 SSMS 和 CMD 中)实际上是不同的。
错误很明显,不是吗?您文件中的代码正在尝试创建一个对象,但同名的对象已经存在。
正如其他 cmets 所提到的,insert into ...
不会创建表,因此您的脚本中还有其他内容。我希望 Avro 是正确的,脚本使用 select into
而不是 insert into
。但是没有看到真正的代码我们只能猜测。
该命令无法抛出所示错误。您的命令只是插入数据,但错误是关于创建现有表。显示实际脚本。
【参考方案1】:
从您正在使用的目录中删除表创建脚本。
【讨论】:
以上是关于插入查询在 SSMS 中有效,但在 SQLCMD 中无效的主要内容,如果未能解决你的问题,请参考以下文章
sqlcmd SQL 返回字符串值作为#name? - 值在 SSMS 中正确显示
我的查询在 SSMS 中很快,但在我的应用程序中超过 1 小时
EF Core 中的查询超时,但在 SSMS 中运行速度很快