【问题标题】:Populating ms sql with sql files用 sql 文件填充 ms sql
【发布时间】:2015-05-11 14:15:18
【问题描述】:

我已经有一个现有的数据库,我正在尝试每天更新。我每天都会转储 sql 文件。下面的批处理脚本在我第一次运行它时创建并填充了数据库,但是当我尝试用它更新数据库时它不起作用。

`@echo off
ECHO %USERNAME% started the batch process at %TIME%  >output.txt


for %%f in (*.sql) do (
sqlcmd.exe  -S servername -E   -d DatabaseName -i %%f >>output.txt
    )
pause`

是否有不同的命令用于使用 sql 文件更新数据库? 这是我得到的输出。

HUTRC started the batch process at 9:55:12.25 Changed database context to 'master'. Msg 15416, Level 16, State 1, Server HUTRC1-HP, Procedure sp_dbcmptlevel, Line 67 Usage: sp_dbcmptlevel [dbname [, compatibilitylevel]] Valid values of the database compatibility level are 100, 110, or 120.

sql 文件的样子。它很长。我刚刚得到了前几行。

USE [master]
GO
IF NOT EXISTS (SELECT [name] FROM sys.databases WHERE name = N'Migration')
BEGIN
CREATE DATABASE [Migration] COLLATE SQL_Latin1_General_CP1_CI_AS
END
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'Migration', @new_cmptlevel=90

【问题讨论】:

  • 你能描述一下这个“不起作用”的方式吗?另外,您尝试加载的 sql 文件的内容是什么?
  • 这是我得到的输出。 HUTRC 在 9:55:12.25 开始批处理将数据库上下文更改为“主”。消息 15416,级别 16,状态 1,服务器 HUTRC1-HP,过程 sp_dbcmptlevel,第 67 行用法:sp_dbcmptlevel [dbname [, compatibilitylevel]] 数据库兼容级别的有效值为 100、110 或 120。
  • 那么,您的 SQL 文件中传递的数据库兼容级别的值是多少?该错误清楚地表明您提供的不是正确的值(100、110 或 120)。您没有包含导致错误的 SQL 脚本的内容,因此我们无法为您阅读。
  • 我在发布答案后清理了一些杂乱的评论。您可能也想做同样的事情,因为它们不再相关。 :-)

标签: database sql-server-2008 tsql mysqldump sqlcmd


【解决方案1】:

错误消息准确地告诉您在哪里查找问题以及问题所在(强调):

过程 sp_dbcmptlevel,第 67 行用法:sp_dbcmptlevel [dbname [, compatibilitylevel]] 数据库兼容级别的有效值为 100、110 或 120。

检查您的 SQL 脚本是否有 sp_dbcmptlevel 表明它使用了不同的值:

EXEC dbo.sp_dbcmptlevel @dbname=N'Migration', @new_cmptlevel=90
                                                             ^^

您需要将 SQL 脚本编辑为有效的兼容性级别,或者将您的服务器版本降级到与源服务器相同的版本。

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多