如何在存储过程中退出?
我有一个存储过程,我想尽早摆脱(尝试调试).我已经打过电话RETURN,并RAISERROR和SP在后台继续运行:
CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS
print 'before raiserror'
raiserror('this is a raised error', 18, 1)
print 'before return'
return -1
print 'after return'
[snip]
Run Code Online (Sandbox Code Playgroud)
我知道它继续运行,因为我遇到了进一步的错误.我看不到任何印刷品.如果我注释掉大部分存储过程:
CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS
print 'before raiserror'
raiserror('this is a raised error', 18, 1)
print 'before return'
return -1
print 'after return'
/*
[snip]
*/
Run Code Online (Sandbox Code Playgroud)
然后我没有得到我的错误,我看到结果:
before raiserror
Server: Msg 50000, Level 18, State 1, Procedure Archive_Session, Line 5
this is a raised error …Run Code Online (Sandbox Code Playgroud) t-sql sql-server stored-procedures sql-server-2000 flow-control
目前,我们在脚本文件中为每个存储过程使用单独的drop语句:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MySP]')
AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[MySP]
Run Code Online (Sandbox Code Playgroud)
有没有办法一次性将它们全部丢弃,或者可能在一个循环中?
如果我使用类似的东西
[ntext2] <> '1,032.5',
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
数据类型ntext和varchar在不等于运算符时不兼容.
最好的解决方案是,如果对任何列类型以相同的方式实现比较.(<>运算符适用于NVARCHAR和INT).
得到此错误:
System.Data.SqlClient.SqlException:将datetime2数据类型转换为日期时间数据类型会导致超出范围的值.
我的实体对象全部排列到DB对象.
我通过Google发现只有一个引用此错误:
阅读本文之后,我记得我们确实添加了2个字段,然后从VS 2010更新了实体模型.我不确定他的意思是"手工编码"差异.我没有看到任何.
我在代码中所做的就是填充实体对象,然后保存.(我还在代码中填充新字段)我用DateTime.Now... 填充了日期字段
代码的重要部分是: ctx.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
该数据库是SQL Server 2008.
思考?
其余的错误:
在System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter适配器)在System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)在System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)在SafariAdmin.Site.WebServices.SpeciesPost.SaveOrUpdateSpecies(字符串SID,字符串fieldName的,字符串的authToken)在SpeciesPost.svc.cs:管线58在SafariAdmin.TestHarness.Tests.Site.WebServices.SpeciesPostSVC_Tester.SaveNewSpecies()在SpeciesPostSVC_Tester.cs:线33 --SqlException在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection)在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection)在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()在System.Data.在System.Data的System.Data.SqlClient.SqlDataReader.get_MetaData()处的System.Data.SqlClient.SqlDataReader.ConsumeMetaData()处的SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj). System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior)上的System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)中的SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString) cmdBehavior,runBehavior runBehavior,布尔returnStream,字符串方法,DbAsyncResult结果)在System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,runBehavior runBehavior,布尔returnStream,在System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior行为,串法)在System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior行为)在System.Data.Common.DbCommand.ExecuteReader(的CommandBehavior行为)在系统串法) .Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator,EntityConnection connection,Dictionary
2 identifierValues, ListSystem.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)中的1 generatedValues)
很简单,我有两个表Source和Target.
declare @Source table (SourceID int identity(1,2), SourceName varchar(50))
declare @Target table (TargetID int identity(2,2), TargetName varchar(50))
insert into @Source values ('Row 1'), ('Row 2')
Run Code Online (Sandbox Code Playgroud)
我想将所有行移动@Source到@Target并知道TargetID每个行,SourceID因为还有表格SourceChild,TargetChild并且需要复制,我需要将新行添加TargetID到TargetChild.TargetIDFK列中.
有几个解决方案.
scope_identity()填充FK TargetChild.@Target并插入SourceID.然后,您可以加入该列以获取TargetIDFK中的内容TargetChild.SET IDENTITY_INSERT OFFfor @Target和处理自己分配新值.您将获得一个然后使用的范围TargetChild.TargetID.我不是那么喜欢他们中的任何人.我到目前为止使用的是游标.
我真正想要做的是使用outputinsert语句的子句.
insert into @Target(TargetName)
output inserted.TargetID, S.SourceID
select SourceName
from @Source as …Run Code Online (Sandbox Code Playgroud) 我在一个存储过程中查询,该存储过程使用一些动态SQL调用某些链接服务器.我知道EF不喜欢这样,所以我特意列出了所有要返回的列.然而,它仍然不喜欢这样.我在这做错了什么?我只是希望EF能够检测从存储过程返回的列,以便我可以创建我需要的类.
请参阅以下代码,它构成了我的存储过程的最后几行:
SELECT
#TempMain.ID,
#TempMain.Class_Data,
#TempMain.Web_Store_Class1,
#TempMain.Web_Store_Class2,
#TempMain.Web_Store_Status,
#TempMain.Cur_1pc_Cat51_Price,
#TempMain.Cur_1pc_Cat52_Price,
#TempMain.Cur_1pc_Cat61_Price,
#TempMain.Cur_1pc_Cat62_Price,
#TempMain.Cur_1pc_Cat63_Price,
#TempMain.Flat_Length,
#TempMain.Flat_Width,
#TempMain.Item_Height,
#TempMain.Item_Weight,
#TempMain.Um,
#TempMain.Lead_Time_Code,
#TempMain.Wp_Image_Nme,
#TempMain.Wp_Mod_Dte,
#TempMain.Catalog_Price_Chg_Dt,
#TempMain.Description,
#TempMain.Supersede_Ctl,
#TempMain.Supersede_Pn,
TempDesc.Cust_Desc,
TempMfgr.Mfgr_Item_Nbr,
TempMfgr.Mfgr_Name,
TempMfgr.Vendor_ID
FROM
#TempMain
LEFT JOIN TempDesc ON #TempMain.ID = TempDesc.ID
LEFT JOIN TempMfgr ON #TempMain.ID = TempMfgr.ID
Run Code Online (Sandbox Code Playgroud) 我需要创建一个具有相同列和类型的临时表作为永久表.最好的方法是什么?(永久表有超过100列)
即
通常我会像这样创建表格.
DECLARE #TT TABLE(
member_id INT,
reason varchar(1),
record_status varchar(1) ,
record_type varchar(1)
)
Run Code Online (Sandbox Code Playgroud)
但有没有办法在不提及列名和类型的情况下执行此操作,但是提及具有所需列的另一个表的名称?
我想从此查询中获取ExtractedDate的值,并在下一个查询中将其用作@LastExtractDate.我怎么做?
SELECT TOP 1 [ExtractedDate]
FROM [OnsiteV4].[dbo].[SqlPendingIndex] order by ExtractedDate desc
Run Code Online (Sandbox Code Playgroud)
下一个查询:
insert into @table(Hex, KeyDeviceId, ObjectDateTime, ExtractedDate )
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), ObjectValue, 1)) AS Hex, KeyDeviceId, ObjectDateTime , GETDATE ()
FROM SQLPending
WHERE (ObjectSubType LIKE '%GAS%') and (ObjectDateTime > @LastExtractDate)
Run Code Online (Sandbox Code Playgroud) 我知道你不能(至少不容易)在SQL Server 2008上恢复SQL Server 2012备份.但它如何适用于SQL Server 2014到SQL Server 2012?
在数据库级别,可以将兼容性模式调整为任何其他SQL Server版本.
这有什么帮助或工作?它只会禁止2014年的功能吗?
说实话,我已经尝试恢复备份,但2012年没有识别数据文件,所以我无法点击ok Button启动恢复过程.
我错过了一些重要的选择吗?
sql sql-server compatibility sql-server-2012 sql-server-2014
我在~7000行T-SQL存储过程中有我的业务逻辑,其中大多数都有下一个JOIN语法:
SELECT A.A, B.B, C.C
FROM aaa AS A, bbb AS B, ccc AS C
WHERE
A.B = B.ID
AND B.C = C.ID
AND C.ID = @param
Run Code Online (Sandbox Code Playgroud)
如果我用这个替换这样的查询,我会获得性能增长:
SELECT A.A, B.B, C.C
FROM aaa AS A
JOIN bbb AS B
ON A.B = B.ID
JOIN ccc AS C
ON B.C = C.ID
AND C.ID = @param
Run Code Online (Sandbox Code Playgroud)
或者他们是一样的?