我的表名为Person,列名为ID 如何检查ID是否已经是FOREIGN KEY因为我想用这段代码来实现:
ALTER TABLE Person ADD FOREIGN KEY(ID) REFERENCES Job(ID)
ON DELETE CASCADE ON UPDATE CASCADE
但是如果ID已经是FOREIGN KEY,它会给我以下错误“可能导致循环或多个级联路径”,因为有两个级联的条件...如何检查此字段是否为FOREIGN KEY以避免此错误?
答案 0 :(得分:6)
您想要查看INFORMATION SCHEMA
次观看
虽然它没有那么完整。这是您想要的最终查询:
SELECT
KCU1.CONSTRAINT_NAME AS 'FK_CONSTRAINT_NAME'
, KCU1.TABLE_NAME AS 'FK_TABLE_NAME'
, KCU1.COLUMN_NAME AS 'FK_COLUMN_NAME'
, KCU1.ORDINAL_POSITION AS 'FK_ORDINAL_POSITION'
, KCU2.CONSTRAINT_NAME AS 'UQ_CONSTRAINT_NAME'
, KCU2.TABLE_NAME AS 'UQ_TABLE_NAME'
, KCU2.COLUMN_NAME AS 'UQ_COLUMN_NAME'
, KCU2.ORDINAL_POSITION AS 'UQ_ORDINAL_POSITION'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG
AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG =
RC.UNIQUE_CONSTRAINT_CATALOG
AND KCU2.CONSTRAINT_SCHEMA =
RC.UNIQUE_CONSTRAINT_SCHEMA
AND KCU2.CONSTRAINT_NAME =
RC.UNIQUE_CONSTRAINT_NAME
AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
请点击此处了解更多信息
http://msdn.microsoft.com/en-us/library/aa175805(v=sql.80).aspx
答案 1 :(得分:0)
Here is a simple little version
package booke.vfj.angour.ir.baftani_davood;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.Context;
import android.view.LayoutInflater;
import org.json.JSONObject;
import java.util.ArrayList;
public class G extends Application {
public static Context context;
public static LayoutInflater inflater;
public static Activity currentActivity;
public static ArrayList<StructTest> Recordsfehrset = new ArrayList<StructTest>();
public static ArrayList<StructTest2> recordjoziat = new ArrayList<StructTest2>();
public static ArrayList<StructTest> fov = new ArrayList<StructTest>();
@Override
public void onCreate()
{
super.onCreate();
context = getApplicationContext();
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
OneSignal.startInit(this).init();
OneSignal.startInit(this).setNotificationOpenedHandler(new NotificationOpenedHandler()).init();
}
private class NotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
@Override
public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
try {
String messageTitle;
AlertDialog.Builder builder = null;
if (additionalData != null) {
if (additionalData.has("discount"))
messageTitle = "Discount!";
else if (additionalData.has("bonusCredits"))
messageTitle = "Bonus Credits!";
else
messageTitle = "Other Extra Data";
builder = new AlertDialog.Builder(getApplicationContext()).setTitle(messageTitle).setMessage(message + "\n\n" + additionalData.toString());
}
else if (isActive) // If a push notification is received when the app is being used it does not display in the notification bar so display in the app.
builder = new AlertDialog.Builder(getApplicationContext())
.setTitle("OneSignal Message")
.setMessage(message);
// Add your app logic around this so the user is not interrupted during gameplay.
if (builder != null)
builder.setCancelable(true)
.setPositiveButton("OK",null)
.create().show();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
You can easily add table name and DB name in the where clause as well