小编gbn*_*gbn的帖子

TSQL:触发器中的Try-Catch事务

我试图在使用Microsoft Server 2005的触发器中放置一个try-catch语句.

BEGIN TRANSACTION
BEGIN TRY
    --Some More SQL
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    IF (XACT_STATE()) = -1
    BEGIN
        ROLLBACK TRANSACTION;
    END;
END CATCH
Run Code Online (Sandbox Code Playgroud)

问题是,如果try-catch块捕获了某些内容,我不希望触发器失败.目前,我收到错误"交易在触发器中结束.批次已中止." 如果交易失败.如何让触发器优雅地失败?


另外,如果我删除了该事务,我会收到错误"事务在触发器中注定.批处理已中止.".

BEGIN TRY
    --Some More SQL
END TRY
BEGIN CATCH
    return
END CATCH
Run Code Online (Sandbox Code Playgroud)

有没有办法解决?

t-sql sql-server triggers

14
推荐指数
3
解决办法
5万
查看次数

Sql选择包含部分字符串的行

我想为网站seo写一个比较程序(t-sql).

我有一个表'字段'url'(nvarchar()),其中包含网站网址的一部分.例如:' mysyte.com/?id = 2 '.此表的每个网址都包含我需要提取的元数据.

主要问题是网站上的完整网址看起来像' mysyte.com/?id=2®ion=0&page=1 ',我只需要忽略everething,除了表格中的网址:

我的意思是:'mysyte.com/?id=2'=>是'mysyte.com/?id=2®ion=0&page=1'的一部分

sql t-sql

14
推荐指数
3
解决办法
10万
查看次数

动态SQL(将表名作为参数传递)

我想编写一个存储过程,它将使用一个参数,它将是表名.

例如:

@tablename << Parameter

SELECT * FROM @tablename
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

我写了这个:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetAllInterviewQuestions]
@Alias varchar = null
AS
BEGIN
Exec('Select * FROM Table as ' @Alias) 
END
Run Code Online (Sandbox Code Playgroud)

但它说@Alias附近的语法不正确.

t-sql sql-server

13
推荐指数
1
解决办法
4万
查看次数

如何转义字符串以便与SQL Server中的LIKE运算符一起使用?

我正在寻找在SQL Server中工作的类似于@c#中的符号的东西,这会导致字符串被视为文字.例如:

string text = "abcd\\efg";
Output of text = abcd\efg

string text = @"abcd\\efg";
Output of text = abcd\\efg
Run Code Online (Sandbox Code Playgroud)

注意@如何影响字符串以按字符顺序获取每个字符.

现在我不确定这是可能的,但这是我的问题,也许有更好的方法来解决这个问题.请考虑以下基本查询:

SELECT [Name] 
  FROM [Test] 
 WHERE [Name] LIKE (@searchText + '%')
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果他们把一个%,_或任何其他的那些特殊字符,可以影响我喜欢条款.我希望这场比赛就像一个'开始'功能.那么有什么我可以应用于@searchText来说明这一点,或者是否有可能是一个我没想到的更好的解决方案?

编辑:我不希望解决方案是客户端清理.我需要这个存储过程工作,而不依赖于被清理传递的数据.

sql t-sql sql-server pattern-matching

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

在t-sql中为所有用户表添加一列

我需要向数据库中的所有40个用户表添加一个删除标志列.我可以编写一个脚本来循环遍历sys.tables,但我想我会检查一下是否有人有更好的解决方案,或者预先为这个场景创建了sql.

sql t-sql sql-server database-design metadata

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

将十六进制字符串值插入sql server图像字段会追加额外的0

有一个图像字段,并希望从十六进制字符串中插入:

insert into imageTable(imageField) 
values(convert(image, 0x3C3F78...))
Run Code Online (Sandbox Code Playgroud)

但是当我运行select时,返回值为0,另外0为0x03C3F78 ...

这个额外的0导致另一个应用程序出现问题,我不想要它.

如何阻止添加额外的0?

架构是:

CREATE TABLE [dbo].[templates](
    [templateId] [int] IDENTITY(1,1) NOT NULL,
    [templateName] [nvarchar](50) NOT NULL,
    [templateBody] [image] NOT NULL,
    [templateType] [int] NULL)
Run Code Online (Sandbox Code Playgroud)

并且查询是:

insert into templates(templateName, templateBody, templateType) 
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2)
Run Code Online (Sandbox Code Playgroud)

实际的十六进制字符串非常大,可以在这里发布.

t-sql binary sql-server-2008

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

SQL中的日期序列?

如何将一天[1-31]和一个月[1-12]以及一年(全部为int)转换为串行IN SQL的日期(不转换为varchar)?

sql t-sql sql-server date

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

为什么要输入sql函数名?

什么是一个场景,例证了在SQL Server中对函数名使用前缀(例如fn_GetName)的一个很好的理由?似乎没有必要,因为通常使用它的上下文会清楚它是一个函数.我还没有使用任何其他需要函数前缀的语言,我想不出一个好的场景可以说明为什么SQL有什么不同.

我唯一的想法是,也许在较旧的IDE中,当数据库对象全部列在一起时,将函数分组在一起很有用,但现代IDE已经明确了什么是函数.

sql t-sql sql-server naming-conventions

13
推荐指数
4
解决办法
1万
查看次数

对于Nvarchar(Max),我只在TSQL中获得4000个字符?

这是SS 2005.

为什么我只有4000个字符而不是8000个?

它在4000处截断字符串@ SQL1.

ALTER PROCEDURE sp_AlloctionReport(
    @where NVARCHAR(1000),
    @alldate NVARCHAR(200),
    @alldateprevweek NVARCHAR(200))
AS
    DECLARE @SQL1 NVARCHAR(Max)

    SET @SQL1 = 'SELECT DISTINCT VenueInfo.VenueID, VenueInfo.VenueName, VenuePanels.PanelID, 
    VenueInfo.CompanyName, VenuePanels.ProductCode, VenuePanels.MF, VenueInfo.Address1, 
    VenueInfo.Address2, '' As AllocationDate, '' As AbbreviationCode, VenueInfo.Suburb, VenueInfo.Route, VenueInfo.ContactFirstName, 
    VenueInfo.ContactLastName, VenueInfo.SuitableTime, VenueInfo.OldVenueName, 
    VenueCategories.Category, VenueInfo.Phone, VenuePanels.Location, VenuePanels.Comment, 
    [VenueCategories].[Category] + '' Allocations'' AS ReportHeader, 
    ljs.AbbreviationCode AS PrevWeekCampaign
    FROM (((VenueInfo INNER JOIN VenuePanels ON VenueInfo.VenueID = VenuePanels.VenueID) 
    INNER JOIN VenueCategories ON VenueInfo.CategoryID = VenueCategories.CategoryID) 
    LEFT JOIN (SELECT CampaignProductions.AbbreviationCode, VenuePanels.PanelID, CampaignAllocations.AllocationDate
                    FROM (((VenueInfo …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server nvarchar sql-server-2005

12
推荐指数
1
解决办法
3万
查看次数

我可以在NOT NULL字段中插入空字符串吗?

我可以在非空字段中插入空字符串吗?

insert into xyz(A,B) values(1,'');  // is this possible if B is NOT NULL?
Run Code Online (Sandbox Code Playgroud)

sql

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