是否可以忽略事务

时间:2016-08-05 00:31:43

标签: sql sql-server tsql

所以,如果我有类似

的东西
WifiNest.cpp.o:(.text._ZN11ArduinoJson9JsonArray7invalidEv[_ZN11ArduinoJson9JsonArray7invalidEv]+0x8): undefined reference to `__cxa_guard_acquire'
WifiNest.cpp.o:(.text._ZN11ArduinoJson9JsonArray7invalidEv[_ZN11ArduinoJson9JsonArray7invalidEv]+0xc): undefined reference to `__cxa_guard_release'
WifiNest.cpp.o: In function `ArduinoJson::JsonArray::invalid()':
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_release'
WifiNest.cpp.o: In function `ArduinoJson::JsonObject::invalid()':
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_release'
collect2.exe: error: ld returned 1 exit status
Error compiling.

然后很明显我收到错误

  

无法将值NULL插入列' NotNullColumn',表中   ' Merchant_BizarroNordstrom.dbo.FakeTable&#39 ;;列不允许   空值。 INSERT失败。

我想知道是否有暂时的方式,即在交易的上下文中,这样做是为了将char jsonArray [result.length()+1]; result.toCharArray(jsonArray,sizeof(jsonArray)); jsonArray[result.length() + 1] = '\0'; DynamicJsonBuffer json_buf; JsonObject &root = json_buf.parseObject(jsonArray); if (!root.success()) { Serial.println("parseObject() failed"); } 插入到具有static JsonArray &invalid() { static JsonArray instance(NULL); return instance; } 约束的列中导致没有任何事情发生而不是错误。

如果您对我现实生活中的问题感到好奇,那么我不想花费数小时阅读和调试,因此我想应用快速解决方案。

2 个答案:

答案 0 :(得分:4)

使用TRY..CATCH阻止

像......那样的东西。

BEGIN TRY
   BEGIN TRANSACTION
      INSERT INTO FakeTable (NotNullColumn) VALUES (NULL);
   COMMIT TRANSACTION
END TRY

BEGIN CATCH
   IF (@@TRANCOUNT > 0)
      ROLLBACK TRANSACTION
  PRINT 'Do something or nothing here'

END CATCH

使用try..catch块可以控制在出现错误时引发错误的时间。

在Try块中因为无法插入空值,控件跳转到Catch块,在那里您可以显式引发错误或什么也不做。

修改

阅读评论后,我认为你需要一个而不是插入触发器。像......那样......

CREATE TRIGGER insert_Into_FakeTable 
ON FakeTable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO FakeTable (NotNullColumn)
  SELECT NotNullColumn
  FROM inserted
  WHERE NotNullColumn IS NOT NULL

END

将触发Trigger而不是实际的Insert语句,并且只会插入非null值。

答案 1 :(得分:-1)

  

但我只想对null插入做任何事情。例如,如果   我有INSERT INTO FakeTable(NotNullColumn)VALUES(NULL,5);然后我   仍然希望插入5个。

INSERT INTO FakeTable (NotNullColumn, othercolumn) VALUES (ISNULL(@VAL_THAT_MIGHT_BE_NULL,''), 5);

这将照顾您的要求。当然,不用说它将NULL值转换为空字符串,并且您的应用程序需要能够处理它。如果你的应用程序不期望一个空字符串,那么这不会起作用。