标签: sql-server

SQL Server 2000:如何退出存储过程?

如何在存储过程中退出?

我有一个存储过程,我想尽早摆脱(尝试调试).我已经打过电话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

60
推荐指数
6
解决办法
14万
查看次数

如何在SQL Server数据库中一次删除所有存储过程?

目前,我们在脚本文件中为每个存储过程使用单独的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)

有没有办法一次性将它们全部丢弃,或者可能在一个循环中?

sql t-sql sql-server

60
推荐指数
4
解决办法
12万
查看次数

将NTEXT列与常量值进行比较的正确方法是什么?

如果我使用类似的东西

[ntext2] <> '1,032.5',
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

数据类型ntext和varchar在不等于运算符时不兼容.

最好的解决方案是,如果对任何列类型以相同的方式实现比较.(<>运算符适用于NVARCHAR和INT).

sql t-sql sql-server ntext

60
推荐指数
2
解决办法
7万
查看次数

在VS 2010 .net 4.0中使用实体框架时出现'datetime2'错误

得到此错误:

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,Dictionary2 identifierValues, ListSystem.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)中的1 generatedValues)

c# sql-server entity-framework sql-server-2008

60
推荐指数
6
解决办法
6万
查看次数

使用merge..output获取source.id和target.id之间的映射

很简单,我有两个表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并且需要复制,我需要将新行添加TargetIDTargetChild.TargetIDFK列中.

有几个解决方案.

  1. 使用while循环或游标一次向Target插入一行(RBAR)并使用scope_identity()填充FK TargetChild.
  2. 添加临时列@Target并插入SourceID.然后,您可以加入该列以获取TargetIDFK中的内容TargetChild.
  3. 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-server merge sql-server-2008

60
推荐指数
1
解决办法
2万
查看次数

EF4 - 选定的存储过程不返回任何列

我在一个存储过程中查询,该存储过程使用一些动态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)

sql-server temp-tables entity-framework-4

60
推荐指数
3
解决办法
4万
查看次数

创建具有相同列和类型作为永久表的临时表的最佳方法

我需要创建一个具有相同列和类型的临时表作为永久表.最好的方法是什么?(永久表有超过100列)

通常我会像这样创建表格.

DECLARE  #TT TABLE(              
  member_id INT,    
  reason varchar(1),    
  record_status varchar(1) ,    
  record_type varchar(1)    
 ) 
Run Code Online (Sandbox Code Playgroud)

但有没有办法在不提及列名和类型的情况下执行此操作,但是提及具有所需列的另一个表的名称?

sql sql-server

60
推荐指数
4
解决办法
9万
查看次数

选择Top 1字段并分配给本地变量

我想从此查询中获取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 sql-server

60
推荐指数
4
解决办法
6万
查看次数

可以在SQL Server 2012上恢复SQL Server 2014的备份吗?

我知道你不能(至少不容易)在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

60
推荐指数
2
解决办法
13万
查看次数

ANSI JOIN与非ANSI JOIN查询的执行方式是否不同?

我在~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)

或者他们是一样的?

sql t-sql sql-server join

59
推荐指数
2
解决办法
8万
查看次数