sql server2000 זקוק לעזרה ב dynamic sql

sql server2000 זקוק לעזרה ב dynamic sql

ותמיד אזדקק... שלום הקוד שלי:
/*EXEC dbo.Dynamic_tests 'testtable'*/ ALTER PROCEDURE dbo.Dynamic_tests @testfile VARCHAR(20) AS BEGIN TRANSACTION DECLARE @dynamic VARCHAR(2000) SET @dynamic= ' IF EXISTS (SELECT * FROM sysobjects WHERE name='+@testfile + ')' +'DROP TABLE ' + @testfile exec(@dynamic) COMMIT יוצר הודעת שגיאה כדלקמן:
Server: Msg 207, Level 16, State 3, Line 2 Invalid column name 'testtable'.​
בביצוע print לביטוי מתקבל:
IF EXISTS (SELECT * FROM sysobjects WHERE name=testtable)DROP TABLE testtable​
נשגב מבענתי היכן הטעות. מישהו יכול לעזור לי ? תודה.
 

גרי רשף

New member
כנראה הבעייה היא כדלקמן..

הפקודה צריכה להיות:
IF EXISTS (SELECT * FROM sysobjects WHERE name='testtable') DROP TABLE testtable​
ולכן הפרוצדורה צריכה להיות:
/*EXEC dbo.Dynamic_tests 'testtable'*/ ALTER PROCEDURE dbo.Dynamic_tests @testfile VARCHAR(20) AS BEGIN TRANSACTION DECLARE @dynamic VARCHAR(2000) SET @dynamic= ' IF EXISTS (SELECT * FROM sysobjects WHERE name='''+@testfile + ''') ' +'DROP TABLE ' + @testfile exec(@dynamic) COMMIT​
במקרים כאלו נסה להריץ את פקודת ה-SQL שקיבלת ולהבין למה היא לא מתבצעת, ורק אז לתקן בהתאם את הפרוצדורה.
 
למעלה