سؤال

لدي العديد من الجداول في قاعدة البيانات الخاصة بي وأقوم بتجميع القيم المحسوبة بالكود التالي وأرغب في إدراج هذه القيم في جدول آخر.أنا أستخدم طريقة SELECT INTO ولكن قاعدة البيانات تخبرني أن "بناء جملة غير صحيح بالقرب من سطر الكلمة الأساسية INTO...".أعتقد أن هناك شيئًا أفتقده ولكني لست متأكدًا من مكانه.الرمز يبدو جيدًا.هنا هو الكود الخاص بي.سيكون موضع تقدير أي مساعدة.

SELECT (second.[cdate]=@enddate) AS 'Date', first.[machine_no] AS 'No', 
tbl_machines.[manufacturer] As 'Manufacturer',
tbl_machines.[type] As 'Machine Type',tbl_machines.[game_name] AS 'Game Name',
tbl_machines.[accounting_denomination] AS 'Denom', 
(second.[turnover])-(first.[turnover]) AS 'Turnover',
(second.[total win])-(first.[total win]) AS 'Total win',
(second.[games played])-(first.[games played]) AS 'Games Played',
(second.[Bill in])-(first.[Bill in]) AS 'Bill In', 
(second.[credit in])-(first.[credit in]) AS 'Credit IN', 
(second.[cancel credit])-(first.[cancel credit]) AS 'Cancel Credit',
tbl_rate.[euro] AS 'euro rate',
tbl_rate.[dollar] AS 'dollar rate' 
INTO  tbl_daily
FROM tbl.meter first,tbl.machines,tbl_rate  
INNER JOIN tbl_meter second ON first.[Machine_No] = second.[Machine_No] 
AND 
tbl_machines.[local_no]=first.[machine_no]
WHERE first.[cDate] = @StartDate 
AND second.[cDate] = @EndDate 
AND tbl_rate.[cdate]=@enddate;

حسنًا، لقد استخدمت صيغة INSERT INTO، كل شيء يسير على ما يرام ولكن الآن لدي مشكلة في التاريخ والوقت.عندما استخدمت أمر sql التالي، ظهرت لي رسالة خطأ وتقول "لا يمكن تحويل بت نوع البيانات إلى وقت التاريخ" لقد جربت طريقة Martin's cast ولكنها نفسها.

الكود الخاص بي هو

INSERT INTO tbl_daily SELECT tbl_machines.[ID] AS 'ID', (second.[cdate]=@enddate) AS 'CDate', first.[machine_no] AS 'No',
 tbl_machines.[manufacturer] As 'Manufacturer',
tbl_machines.[type] As 'MachineType',
tbl_machines.[game_name] AS 'GameName',
tbl_machines.[accounting_denomination] AS 'Denom', 
(second.[turnover]-first.[turnover]) AS 'Turnover',
(second.[total win]-first.[total win]) AS 'Totalwin',
 (second.[games played]-first.[games played]) AS 'GamesPlayed', 
(second.[credit in]-first.[credit in]) AS 'CreditIN',
 (second.[Bill in]-first.[Bill in]) AS 'BillIn', 
 (second.[cancel credit]-first.[cancel credit]) AS 'CancelCredit',
tbl_rate.[euro] AS 'eurorate',
tbl_rate.[dollar] AS 'dollarrate' 
 FROM tbl_meter first,tbl_machines,tbl_rate 
INNER JOIN tbl_meter second ON first.[Machine_No] = second.[Machine_No] AND tbl_machines.[local_no]=first.[machine_no] 
WHERE first.[cDate] = @StartDate AND second.[cDate] = @EndDate AND tbl_rate.[cdate]=@enddate;
هل كانت مفيدة؟

المحلول

ملحوظة:تمت كتابة الإجابة أدناه بافتراض SQL Server.لقد قمت بحذفه عند تلقي توضيح VistaDB ولكنني قمت بإلغاء حذفه مرة أخرى قراءة الذي - التي

يمكن اعتبار VistadB مجموعة فرعية من Microsoft SQL Server T-SQL.يتم دعم جميع بناء الجملة لدينا في SQL Server ، ولكن ليس العكس

في هذه الحالة أفترض أنه من الآمن أن نقول أنه إذا كان غير صالح في SQL Server فسيكون غير صالح في VistaDB أيضًا؟هذا بناء جملة غير صالح في SQL Server.

SELECT (second.[cdate]=@enddate) AS 'Date'

ما هو الغرض من هذا الجزء من التعليمات البرمجية؟هل المقصود أن تكون منطقيًا؟(أي.يعود صحيحًا عندما يتطابق العمود مع المتغير).إذا كان الأمر كذلك في SQL Server فإن الأقرب إلى ذلك سيكون هذا.

SELECT CAST((CASE WHEN second.[cdate]=@enddate THEN 1 ELSE 0 END) AS BIT) AS 'Date'

يحرر من التعليقات أرى أنه من المقصود أن يكون

SELECT @enddate AS 'Date'

بالإضافة إلى ذلك لا أرى SELECT ... INTO مدرج كأمر VistaDB هنا.هل هو مدعوم بالتأكيد؟

نصائح أخرى

إذا كنت تستخدم SQL Server، Insert Into هو أكثر للإدراج في جدول تم إنشاؤه بسرعة.إنها طريقة جيدة لفعل الأشياء، ولكن إذا كان الجدول موجودًا بالفعل، فسأستخدم هذا:

INSERT INTO table (column1, columns2, ...)
SELECT
  Value1,
  Value2,
  ...
FROM ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top