我正在尝试将模式同步到不同的数据库.基本上,我在两个数据库上运行任务 - >使用SQL Server Management Studio生成脚本(2005),并将输出与diff工具进行比较.
出于某种原因,一个脚本添加了约束WITH CHECK和一个WITH NO CHECK,然后重新启用了两个约束.
我得到的第一个数据库:
ALTER TABLE [dbo].[Profile] WITH CHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)
第二个数据库生成为
ALTER TABLE [dbo].[Profile] WITH NOCHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
最终结果是一样的吗?(编辑: 似乎很多人只关注这两个脚本的第一个语句.我对这两个脚本的最终结果感兴趣.)
如果最终结果相同,为什么Management Studio会针对不同的数据库生成不同的结果?
我有一个SQL2005 Express数据库,我想在同一个实例上创建一个副本.你如何用脚本来做这件事?
我已经有一个用于生成备份的脚本,但恢复失败了......
错误:
消息3234,级别16,状态2,行2逻辑文件"MyDB_data"不是数据库"MyDB_Test"的一部分.使用RESTORE FILELISTONLY列出逻辑文件名.
消息3013,级别16,状态1,行2 RESTORE DATABASE异常终止.
决议:
RESTORE DATABASE [MyDB_Test]
FROM DISK = 'C:\temp\SQL\MyDB.bak'
WITH
MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf'
, MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf'
, REPLACE;
Run Code Online (Sandbox Code Playgroud)
原因:
我在第一次尝试时没有正确识别逻辑路径.
如何从SQL Server 2005表中删除记录而不将其记录到事务日志中.
我不想记录,因为一旦删除,将永远不再需要这些记录.
目前各种删除需要花费太多时间.是否有其他选项可以提高删除语句的性能?我不能使用truncate,因为需要where子句.
我使用SQL Server 2005作为数据存储,用于我分析工作的大量数据.这不是一个事务性数据库,因为我没有使用更新或捕获实时数据.我从客户端获取了一些数据,将它们加载到SQL Server中并进行一系列操作.然后我抓住这些数据并将它们拉入R,我将进行大部分分析.然后我将一些数据推送到SQL Server中的表中,也许可以进行一两次连接.
我有一段时间,SQL Server中的日志变得越来越大,我认为创建它们需要一定程度的开销.如何配置SQL Server以便它在很少或没有日志记录的情况下运行?如果事情变得腐败,我很高兴从一开始就开始.任何想法如何使这一切更快?
顺便说一句,没有必要告诉我如何缩小日志,我已经这样做了.但我希望我不必首先制作原木.我只使用数据库来存放数据,因为它太大而无法容纳R中的内存.
我应该使用比Sql Server更简单的数据库吗?随意告诉我,我正用大锤杀死一只蚂蚁.但请推荐一个更合适尺寸的锤子.:)
我想如果它可以从sql server里面运行多久sql server一直在运行.
想与未使用的索引中的一个DMV一起使用它,但是每次sql server加载时都会重置set,所以我想知道它们有多么有用.
如何在SQL 2008数据库中列出没有索引的表?
编辑
我想要Schema名称和Table名称.
我有一个执行存储过程的步骤作业.我想获得上次成功执行作业的日期,以便我可以更新delta而不是整个数据集.
现在我的作业设置每天运行一次,所以我有一个默认参数,如果它为null我将它设置为GETDATE() - 1所以我还在更新delta但是我想要做的是设置上次成功执行作业的日期.
exec dbo.usp_UpdateFrom @LastSuccessfulExecutionTime
Run Code Online (Sandbox Code Playgroud)
目前的程序是这样的
CREATE PROCEDURE dbo.usp_UpdateFrom
@FromDate datetime = NULL --would like to pass last successful execution time of the job
AS
IF @FromDate IS NULL
SET @FromDate = GETDATE() - 1
-- do stuff
END
Run Code Online (Sandbox Code Playgroud) 我尝试使用text或ntext作为变量的类型,但不允许使用它们.
有没有办法绕过这个?
为什么SQL Server坚持临时表已经存在!一个或另一个会发生!! ,所以情况永远不会如此.
declare @checkvar varchar(10)
declare @tbl TABLE( colx varchar(10) )
set @checkvar ='a'
INSERT INTO @tbl (colx) VALUES('a')
INSERT INTO @tbl (colx) VALUES('b')
INSERT INTO @tbl (colx) VALUES('c')
INSERT INTO @tbl (colx) VALUES('d')
IF @checkvar is null select colx INTO #temp1 FROM @tbl
ELSE select colx INTO #temp1 FROM @tbl WHERE colx =@checkvar
Run Code Online (Sandbox Code Playgroud)
错误是:数据库中已存在名为"#temp1"的对象.
这周围有优雅的方式吗?如果@checkvar为null,我想要整个表,只给我@checkvar =的值
编辑:列是varchar,而不是int.