我有C#代码循环.sql文件并执行其中的内容来设置数据库.
一个.sql文件基本如下:
DROP PROCEDURE IF EXISTS myProc;
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
-- procedure stuff goes here
END $$
DELIMITER ;
CALL myProc();
Run Code Online (Sandbox Code Playgroud)
当我将它输入到MySQL查询浏览器的脚本窗口时,它会一遍又一遍地运行,就像人们希望的那样.
但是,如果我将字符串放入我的IDbCommand并执行它...
connection.Open(); // An IDbConnection
IDbTransaction transaction = connection.BeginTransaction();
using (IDbCommand cmd = connection.CreateCommand())
{
cmd.Connection = connection;
cmd.Transaction = transaction;
cmd.CommandText = line;
cmd.CommandType = CommandType.Text;
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
transaction.Rollback();
return false;
}
}
transaction.Commit();
connection.Close();
Run Code Online (Sandbox Code Playgroud)
......我得到了可怕的例外1064 ......
您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'DELIMITER $$ CREATE PROCEDURE …
我使用Entity Framework 4.0创建了一个使用模型优先方法的数据库模型.然后我使用模型生成数据库创建了一个sql脚本...我还在App_Data文件夹中创建了一个SQL Server数据库文件.我现在如何针对此MDF文件运行SQL文件?
我正在使用Visual Studio 2010.
这些是我的表:
Id, PointsId, Member_Id, CartId, RegisterDate, PointId, Member_Id会员可以在其中注册购物车CartRegister,并且Member.Points必须计算和插入会员所赚取的所有积分.所以我需要计算每个点的所有点SelectedMembers并更新Member表,但我不知道如何实现它.
以下脚本在我脑海中:
UPDATE [Member]
SET [Points]=
(
SELECT SUM([CR].[Point]) AS [AllPoints]
FROM [CartRegister] AS [CR]
WHERE [CR].[Member_Id] = --???
)
WHERE [Members].[Member].[Id] IN ( SELECT Member_Id From SelectedMembers )
Run Code Online (Sandbox Code Playgroud)
所以我很困惑Select Sum(Point)如果我使用的是where子句
WHERE [CR].[Member_Id] IN ( Select Member_Id From SelectedMembers )
Run Code Online (Sandbox Code Playgroud)
然后所有成员的总和相同于所有成员点的总和,也许我需要一些像foreach你的建议是什么?
首先,这个问题涉及Oracle SQL Developer 3.2,而不是SQL*Plus或iSQL等.我已经做了很多搜索,但还没有找到一个直接的答案.
我有几个脚本集合,我正在尝试自动化(顺便说一句,我的SQL经验非常基本,主要是基于MS的).我遇到的麻烦是通过相对路径执行它们.例如,假设此设置:
scripts/A/runAll.sql
| /A1.sql
| /A2.sql
|
/B/runAll.sql
/B1.sql
/B2.sql
Run Code Online (Sandbox Code Playgroud)
我想要一个这样的文件scripts/runEverything.sql:
@@/A/runAll.sql
@@/B/runAll.sql
Run Code Online (Sandbox Code Playgroud)
脚本/ A/runAll.sql:
@@/A1.sql
@@/A2.sql
Run Code Online (Sandbox Code Playgroud)
在那里"@@",我推测,是指在SQL*Plus相对路径.
我愚弄了制作变量,但没有太多运气.我已经能够'&1'在根目录中使用和传递类似的东西.即:scripts/runEverything.sql:
@'&1/A/runAll.sql' '&1/A'
@'&1/B/runAll.sql' '&1/B'
Run Code Online (Sandbox Code Playgroud)
并通过执行以下命令调用它:
@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'
Run Code Online (Sandbox Code Playgroud)
但这里的问题是B/runAll.sql用路径调用:c:/.../scripts/A/B.
那么,SQL Developer是否可以进行嵌套调用,以及如何进行?
当我转到文件>打开>文件并选择.sql脚本,或者甚至当我将.sql文件拖到SQL Management Studio Express窗口时,它会在记事本中打开脚本,当我想运行脚本时这完全没用.
由于这是在外部服务器(Windows 2003 Server)上,我最终必须断开与RDP的连接,禁用本地剪贴板,重新连接,然后从Textpad复制粘贴脚本的内容以运行它.
我检查了选项菜单,但看不到任何与记事本相关的内容,甚至在"外部工具"部分也没有.任何想法为什么会这样做?
请注意:我已检查SQL脚本的文件关联,并将其设置为SQL Management Studio Express.
我想知道创建和维护数据库映射和SQL脚本的最佳方法是什么.我知道我更喜欢在文本编辑器上手工编写SQL脚本(以及在一张纸上设计我旁边的地图),而其他人则更喜欢使用数据库地图软件(MySQL Workbench,Visual Studio) ...... 本帖中列出的一些内容)自动生成脚本.
两种解决方案都有优点和缺点.我看到了这些优点:
你怎么看,你走哪条路?
我们想使用 Flyway 进行数据库迁移。除了迁移脚本之外,我们还需要执行一些不应被视为迁移的脚本(并且不需要在 schema_version 表中进行跟踪)。一个示例是执行包含仅与开发环境相关的配置数据或测试数据的脚本。我们仍然希望使用 Flyway-maven-plugin 来执行这些 SQL 脚本,而不是在我的 Flyway-maven-plugin 之前/之后运行不同的 Maven 插件。
关于Flyway 的迁移前和迁移后脚本也提出了类似的问题。如果实现此功能,它也可以满足我们的需求。
我有一个 SQL 脚本文件,它删除并重新创建各种表,并将各种记录插入到这些表中。该脚本在 SQL 查询控制台中执行时运行良好,但我需要它由实体管理器执行。
关于我如何能够做到这一点的任何想法?
谢谢,
H
我在将数据从一个 sqlserver 2008 r2 传输到另一个具有不同架构的 sqlserver 2012 数据库时遇到问题,这里有一些不同的场景,
- 数据库 1
具有表 Firm 和 Client 的数据库 1,它们都有 FirmId 和 ClientId 主键作为 int 数据类型,FirmId 是 int 数据类型作为 Client 表中使用的引用键。
- 数据库2
数据库 2 具有相同的表 Firm 和 Client,它们都有 FirmId 和 ClientId 但主键作为 uniqueidentifier,FirmId 是 uniqueidentifier 数据类型作为 Client 表中使用的参考键。
- 问题
问题不是将数据从1个数据库表复制到2个数据库表,而是将引用键的Firm表维护到Client表中。因为有数据类型更改。
我正在使用 sql server 2008 r2 和 sql server 2012
请帮助我解决/找到解决方案,我非常感谢您的宝贵时间和精力。谢谢
所以我在创建脚本时一直盲目地使用ansi_nulls on、quoted_identifier on,因为sqlserver在编写对象脚本时会自动生成它们。
我真的没有时间关心这些琐碎的废话:-)但我想必须提出这些问题。
鉴于这些是推荐的设置,是否有一个选项可以设置(a)每个数据库和(b)每个服务器,以便它们默认情况下始终处于打开状态,而不是通过单独的脚本?
如果是这样,如何/在哪里可以查看当前的默认设置?