首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

记一SQL部署问题

2023-11-10 来源:花图问答

TABLE [dbo].[Following]( [Id] [nvarchar](50) NOT NULL, [Name] [nvarchar](40) NULL, [Description] [nvarchar](400) NULL, [BestCaseId] [int] NULL CONSTRAINT [PK_Following] PRIMARY KEY CLUSTERED ( [Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOINSERT INTO [dbo].[Following] VALUES (‘1‘,‘data1‘,null,1)INSERT INTO [dbo].[Following] VALUES (‘2‘,‘data2‘,null,2)INSERT INTO [dbo].[Following] VALUES (‘3‘,‘data3‘,null,3)INSERT INTO [dbo].[Following] VALUES (‘4‘,‘data4‘,null,4)INSERT INTO [dbo].[Following] VALUES (‘5‘,‘data5‘,null,5)INSERT INTO [dbo].[Following] VALUES (‘6‘,‘data6‘,null,6)GOSQL SCRIPT

但随着需求的变更,需要新添加一字段 RiskId, 字段值从 BestCaseId 字段获取:

ALTER TABLE [master].[dbo].[Following]ADD RiskId INT

需要将 BestCaseId 字段值迁移到 RiskId 字段,脚本如下:

IF EXISTS(SELECT * FROM syscolumns WHERE id=object_id(‘Following‘) AND name=‘BestCaseId‘) BEGIN PRINT ‘Column BestCaseId exist‘ UPDATE [master].[dbo].[Following] SET RiskId = (CASE WHEN BestCaseId = 1 THEN 1 WHEN BestCaseId = 2 THEN 2 WHEN BestCaseId = 3 THEN 3 WHEN BestCaseId = 4 THEN 1 WHEN BestCaseId = 5 THEN 2 WHEN BestCaseId = 6 THEN 3 END) ENDELSE PRINT ‘Column BestCaseId is not exist‘

上述代码首先校验表中是否已存在相应字段,如果存在相应字段,打印并进行数据迁移;如果不存在,打印相应提示。

但问题是在已经存在 BestCaseId 字段的生产环境中可正常运行,但在不存在 BestCaseId 字段的新测试环境中却报错。

可通过删除 BestCaseId 字段进行测试:

ALTER TABLE [master].[dbo].[Following]DROP COLUMN BestCaseId

 在不存在 BestCaseId 字段情况下,迁移脚本虽然可通过 Parse, 但在执行时却会有如下 Error:

Msg 207, Level 16, State 1, Line 12Invalid column name ‘BestCaseId‘.

错误原因一直不理解,但如果把 SQL SCRIPT 做为编译语言而非解释语言的话,就会理解错误原因,但原因却是这样吗?毕竟可以通过 Parse.

希望能尽早知道问题原因。

 

上述数据库环境为:MSSQL 2012 R2。

记一SQL部署问题

标签:

小编还为您整理了以下内容,可能对您也有帮助:

数据库DB:SSAS项目部署的若干问题

我是一名实习生,最近在公司做一个BI项目,问题是我之前都没有接触过此类这个方面,自己自学了几天就开始做项目了,现在遇到了好多问题,求各路大神解答!

项目简介:我在实习公司为一个物流公司做BI里关于OLAY部分的工作,使用分析数据的工具是SQL Server。这个公司在此之前已经完成了SSIS的部分,建立了一个数据仓库,现在我需要根据这个数据仓库来完成SSAS,也就是OLAY的部分。

我理解中要实现SSAS需要事先创建好数据仓库,并且在数据仓库中要有事实表和维度表,但实际情况是他们建立的数据仓库中仅仅包含了事实表,而维度表需要我在事实表中先寻找相应的外键,然后再回到他们的关系数据库里寻找可以匹配的“维度”。

补充:他们原本的BI数据仓库与关系数据库是放在一个数据库中,一共900多张表,显得很乱。。

以下是部分的数据仓库表,我选择了其中一个作为例子:

仓库货物出入表(事实表):ID(主键),仓库ID,客户CODE,入库数量,出库数量,剩余数量...(仓库ID,客户CODE用来关联仓库和客户的两个维度,后面三个则是度量值)

仓库表(维度表):仓库ID(主键),仓库名称,仓库地点...

客户表(维度表):客户ID,仓库ID(主键),客户CODE(主键),客户名称,客户所在城市...(这里把仓库ID和客户CODE作为复合主键)

于是我按照微软官方的SSAS教程,一步步进行配置,因为客户表是双主键,所以在数据源视图里,我把两个字段都进行了关联。但是在最后部署的时候发现有错误:

#####错误 12 服务器: 已取消当前操作,因为事务中的另一个操作失败。#####

这个错误我根本查不到在哪里有问题,于是我还做了相应的实验:

我按照微软的格式,在物流公司同一个数据库下,建立了测试的事实表和维度表,通过部署后发现没有问题。——说明软件、数据库均没有问题。

1.同一数据库下,复制三张表格,删除了不必要的列,部署出错。

2.同一数据库下,复制三张表格,删除所有数据,填入一些简单的测试数据,部署成功。——数据之间的问题。

3.同一数据库下,复制三张表格,删除了客户表数据,并填入一些简单的测试数据,部署成功——应该是客户表中的数据问题,4.因为另外两张表都是原表,如果另外两张表有问题就不会部署成功了。

5.同一数据库下,复制三张表格,删除了客户表数据,并添加了一条原本和事实表相关联的数据,部署成功。——猜测:客户表中不能有不关联的数据?

6.同一数据库下,复制三张表格,删除了客户表数据,添加了一条原本和事实表相关联的数据,一条原本和事实表不关联的数据,部署失败。

那么问题来了:如果因为客户表里面有不关联的数据而报错,那么在仓库表中同样有和事实表不关联的数据,为什么仓库表没有问题?而且在6报错的信息与之前的错误信息不同:

#####

错误 7 内部错误: 操作未能成功,已终止。

错误 10 OLAP 存储引擎中存在错误: 由于处理过程中遇到的错误数达到为操作定义的最大允许错误数,处理操作结束。

错误 11 OLAP 存储引擎中存在错误: 处理“t Dc Inventory Snapshot”分区时出错,该分区属于 BI1 数据库的“AAD”数据集的“t Dc Inventory Snapshot”度量值组。

错误 12 服务器: 已取消当前操作,因为事务中的另一个操作失败。

#####

这几天都在搞这个项目,自己又完全不懂,如果我以上有什么概念理解问题,请大神不要鄙视。。

SQL SERVER 附加数据库时出现的问题

权限问题

找到数据库文件所在的文件夹,右键文件夹-属性-安全 里面给文件夹添加everyone权限, 会提示是否给文件夹子目录也添加该权限,你就选择是,就可以了

具体步骤

1 更改数据库文件所有者

打开数据库文件夹,右键点击数据库文件,选择“属性Property” =>“安全Security”,点击“高级Advanced”按钮。

新出现的窗口中,删除文件所有者信息不明的用户或组,选中“允许父项的继承权限传播到该对象和所有子对象。包括那些在此明确定义的项目(A)。”。

点击“应用(A)”。

点击“编辑Edit”, 点击“更改Change”按钮。

出现选择“用户与组”窗口,点击“高级Advanced”按钮。

新窗口中,点击“现在查找 Find Now”按钮,选择“用户组Users”。  

然后一路ok,结束。

2 修改数据库文件所有者权限

再重新右键点击数据库文件,选择“属性Property”=>“安全Security”,

打开的窗口中会看到所有者权限为空。点击“编辑Edit”按钮,

选中“所有者权限”,勾选“完全控制”,然后点击“ok”按钮。

一路ok,结束。

再进行数据库附加,一路顺畅。 

安装SQL到了配置数据库时候老出现问题,无法安装,请高手帮忙 正在与服务器连接... driver={sql server};s

XP系统下也可以安装 企业版本

安装办法如下:

一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它,过程简单直接下一步就OK了。(这个是服务端,按正常方法会提示系统不支持)

二. 重启系统WINDOWSXP,这下就可以看到SQL服务的图标出现了。(服务器图表没出现也可先安装客户端在安装服务端)

三. 再拿出SQL服务器版的安装光盘,直接安装客户端工具(这个不要多说吧?最简单的方法就是直接点击光盘根目录下的autorun.exe)

根据提示安装,自检过程中知道系统不是SERVER版,会提示只安装客户端工具。(哈哈,服务端我已有了)

四. 打开企业管理器,试用SA用户连一下看看,是不是发现SA用户登陆失败?因为你还没有与信任SQL SERVER连接相关联。还好这个只要对系统注册表稍加修改就可以啦:

在运行中输入regedit打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER],这个项里面

有一个键值LoginMode,默认下,值是1,现在将值改为2,重启电脑。

五. 再打开企业管理,再连接试试,是不是OK了!

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela

显示全文