相关疑难解决方法(0)

SQL Server中临时表和表变量之间有什么区别?

在SQL Server 2005中,我们可以通过以下两种方式之一创建临时表:

declare @tmp table (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)

要么

create table #tmp (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)

这两者有什么不同?关于@tmp是否仍然使用tempdb,或者是否所有内容都发生在内存中,我已经阅读了相互矛盾的意见.

在哪种情况下,一个人胜过另一个?

sql-server temp-tables table-variable

375
推荐指数
10
解决办法
34万
查看次数

使用IDENTITY列将记录INSERT到SQL表

我有这个SQL表

CREATE TABLE Notes(
    NoteID [int] IDENTITY(1,1) NOT NULL,
    NoteTitle [nvarchar](255) NULL,
    NoteDescription [nvarchar](4000) NULL
) CONSTRAINT [PK_Notes] PRIMARY KEY CLUSTERED 
(
    NoteID ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我想从临时表中复制包含NoteID的记录(使用sql查询).

这是我的脚本:

SET IDENTITY_INSERT Notes OFF

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription)
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp

SET IDENTITY_INSERT Notes ON
Run Code Online (Sandbox Code Playgroud)

使用此脚本,我收到一个错误:

Cannot insert explicit value for identity column in table 'Notes' when IDENTITY_INSERT is set …
Run Code Online (Sandbox Code Playgroud)

sql

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

如何在log4j2 jdbcappender中设置日期时处理null?

当我在日期列中设置空值时,我在表中得到"1900-01-01 00:00:00.000"值,我期望该列中为NULL.因为这样在jdbc中正确处理,如果我这样说

preparedStatement.setBindParam(Types.TIMESTAMP, 12, startdate);
Run Code Online (Sandbox Code Playgroud)

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">

    <CustomLevels>
        <CustomLevel name="TESTLOG" intLevel="552" />
    </CustomLevels>

    <Appenders>

        <JDBC name="myAppender" tableName="MYTABLE">
            <DataSource jndiName="java:MyDataSource" />
            <Column name="ID" pattern="%X{ID}" isUnicode="false"/>
            <Column name="startdate" pattern="%X{startdate}" isUnicode="false"/>
            <Column name="enddate" pattern="%X{enddate}" isUnicode="false"/>
        </JDBC>

    </Appenders>

    <Loggers>
        <Root level="trace"  includeLocation="false">
            <AppenderRef ref="myAppender" level="TESTLOG" />
        </Root>
    </Loggers>

</Configuration>
Run Code Online (Sandbox Code Playgroud)

列startdate和enddate的数据类型是datetime

ThreadContext.put("startdate", startdate != null ? startdate.toString() : null);
ThreadContext.put("enddate", a_reportEndDate != null ? enddate.toString() : null);
final Logger LOGGER = LogManager.getLogger();
LOGGER.log(Level.forName("TESTLOG", 552), "");
Run Code Online (Sandbox Code Playgroud)

对于具有空值的String也是如此.

java jdbc appender log4j2

8
推荐指数
1
解决办法
520
查看次数

在SQL Server触发器中处理多行

我们有一个名为WarehouseItem的数据库,其中保留了产品的库存水平.我需要知道这个表什么时候更新,所以我创建了一个触发器来放置更新的这个表行的主键; 进入一个单独的表(如队列系统).

这是我的触发器:

IF ((SELECT COUNT(*) FROM sys.triggers WHERE name = 'IC_StockUpdate') > 0)
    DROP TRIGGER [dbo].[IC_StockUpdate]
GO
CREATE TRIGGER [dbo].[IC_StockUpdate] ON [dbo].[WarehouseItem]
AFTER UPDATE
AS
BEGIN

    -- Get Product Id
    DECLARE @StockItemID INT = (SELECT ItemID FROM INSERTED);
    DECLARE @WarehouseID INT = (SELECT WarehouseID FROM INSERTED);

    -- Proceed If This Product Is Syncable
    IF (dbo.IC_CanSyncProduct(@StockItemID) = 1)
    BEGIN

        -- Proceed If This Warehouse Is Syncable
        IF (dbo.IC_CanSyncStock(@WarehouseID) = 1)
        BEGIN

            -- Check If Product Is Synced
            IF …
Run Code Online (Sandbox Code Playgroud)

sql-server triggers

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