سؤال

وأود أن تحد من إدخالات في جدول. دعنا نقول في الجدول <م> tBoss . هل هناك قيود SQL يتحقق كم عدد الصفوف حاليا في الجدول؟ مثل

SELECT COUNT(*) from tBoss < 2

وفايربيرد يقول:

<اقتباس فقرة>   

ورمز غير صالح.   خطأ SQL الحيوية.   رمز الخطأ SQL = -104.   رمزي المجهول - خط 3، عمود 8.   SELECT.

وشكرا. نوربرت

هل كانت مفيدة؟

المحلول

هل لدى قاعدة البيانات الخاصة بك مشغلات؟ إذا كان الأمر كذلك، إضافة الزناد أن تتحرك مرة أخرى أي إدراج التي من شأنها إضافة المزيد من الصفوف 2 ...

Create Trigger MyTrigName
For Insert On tBoss
As
    If (Select Count(*) From tBoss) > 2
       RollBack Transaction

ولكن للإجابة على سؤالك مباشرة، المسند تريده هو أن وضعت للتو حدد فرعي داخل الأقواس. مثل هذا ...

  [First part of sql statement ]
  Where (SELECT COUNT(*) from tBoss) < 2

نصائح أخرى

هل يمكن أن تفعل هذا مع قيد تحقق وظيفة العددية. وإليك كيف بنيت عينة.

أولا، إنشاء جدول:

CREATE TABLE MyTable
 (
   MyTableId  int           not null  identity(1,1)
  ,MyName     varchar(100)  not null
 )

وبعد ذلك إنشاء وظيفة لهذا الجدول. (هل يمكن ربما إضافة الحد الصف العد كما معلمات إذا كنت تريد المزيد من المرونة).

CREATE FUNCTION dbo.MyTableRowCount()
RETURNS int
AS
 BEGIN
    DECLARE @HowMany int

    SELECT @HowMany = count(*)
      from MyTable
    RETURN @HowMany
 END

والآن إضافة قيد الاختيار استخدام هذه الوظيفة إلى طاولة

ALTER TABLE MyTable
 add constraint CK_MyTable__TwoRowsMax
  check (dbo.MyTableRowCount() < 3)

واختباره:

INSERT MyTable (MyName) values ('Row one')
INSERT MyTable (MyName) values ('Row two')
INSERT MyTable (MyName) values ('Row three')
INSERT MyTable (MyName) values ('Row four')

ووالعيب هو أنه في كل مرة كنت أدخل الى طاولة المفاوضات، لديك لتشغيل وظيفة وإجراء فحص الطاولة ... لكن ماذا في ذلك، وتحتل الجدول (مع فهرس مجمع) صفحتين كحد أقصى. العيب الحقيقي هو أنه يبدو نوع من أبله ... ولكن كل شيء يبدو أحمق عندما كنت لا أفهم <م> لماذا يجب أن يكون بهذه الطريقة.

(والحل الزناد العمل، ولكن أود أن تجنب المثيرات كلما كان ذلك ممكنا).

لتجد مضاعفات في قاعدة بيانات أفضل رهان هو استعلام الفرعية على سبيل المثال: (لاحظ انا افترض ان كنت تبحث لتجد الصفوف المكررة من نوع ما)

<اقتباس فقرة>   

ومعرف اختر من tBoss WHERE IN معرف (SELECT معرف من tBoss GROUP BY معرف بصعوبات العد (*)> 1)

وحيث هو معرف العمود ربما تكرار

SELECT COUNT(*) FROM tBoss WHERE someField < 2 GROUP BY someUniqueField
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top