511
צפיות
צפיות
10
תשובות
תשובות
Stored Procedure
שלום,
אני רוצה לכתוב SP שמקבל נתונים של שם טבלה, אימייל וסיסמה.
ה-SP נועד לזהות גולש על פי הנתונים שהזין ברישום למערכת.
הקטע שאני צריך שגם שם הטבלה יהיה דינמי ובכל פעם יגש לטבלה אחרת בדאטא בייס.
איך אני רושם את ה-SP?
10 תשובות
נסה משהו כזה:
CREATE PROCEDURE [stp_test] (
@Table_name [nvarchar](255)
)
AS
DECLARE @sSQL [nvarchar] (255)
SET @sSQL = 'SELECT * FROM '+ @Table_name
exec @sSQL
GO
התחביר מתאים ל SQL SERVER, אם אתה עובד על מסד נתונים אחר, עלולים להיות שינויים בתחביר.
אני צריך גם להוסיף Where לשאילתא
קודם כל תודה.
אני צריך להוסיף גם שני פרמטרים דינמים: Email ו- Password לשאילתא.
Select * From Table_Name Where Email='Email' And Password='Password'
איך הולך התחביר של זה?
באותה הצורה בדיוק…
CREATE PROCEDURE [stp_test] (
@Table_name [nvarchar](255),
@Email [nvarchar](255),
@Password [nvarchar](255)
)
AS
DECLARE @sSQL [nvarchar] (255)
SET @sSQL = 'SELECT * FROM '+ @Table_name +' WHERE Email = '+ @Email +' AND Password = '+ @Password
exec @sSQL
GO
אני מקבל הודעת שגיאה שאני קורא ל-SP
אני קורא ל-SP מתוך קובץ ASP (וגם מתוך ה-Query Analyzer)
Exec stp_test 'Users','[email protected]','123456'
מקבל שגיאה:
Could not find stored procedure 'SELECT * FROM Users WHERE Email = [email protected] AND Password = 123456'
תנסה לקרוא ל exec עם סוגריים:
EXEC(@sSQL)
עדיין לא עובד
הוא מתייחס לפרמטרים שאני שולח כאל שם עמודה
exec stp_test 'Users','[email protected]','123456'
רושם לי ש[email protected] אינו שם עמודה מוכר.
תראה את ה SP.
sp
CREATE PROCEDURE [sp_CheckUser] (
@Table_name [nvarchar](255),
@Email [nvarchar](255),
@Password [nvarchar](255)
)
AS
DECLARE @sSQL [nvarchar] (255)
SET @sSQL = 'SELECT * FROM '+ @Table_name +' WHERE Email = '+ @Email +' AND Password = '+ @Password
exec (@sSQL)
GO
exec sp_CheckUser 'Users','[email protected]','123456'
קודם כל, כאשר אתה מציג קוד
או אנגלית בפורום, ישר אותו לשמאל.
יש אייקון של ישור לשמאל ליד האייקון של ה A עם הפס האדום מתחתיו.
דבר שני, נראה לי שעליתי על הבעיה. נסה כך:
CREATE PROCEDURE [sp_CheckUser] (
@Table_name [nvarchar](255),
@Email [nvarchar](255),
@Password [nvarchar](255)
)
AS
DECLARE @sSQL [nvarchar] (255)
SET @sSQL = 'SELECT * FROM '+ @Table_name +' WHERE Email = "'+ @Email +"' AND Password = '+ @Password
exec (@sSQL)
GO
אם ה password הוא מספרי, אתה יכול לשנות את ה data_type של המשתנה. אם הוא מחרוזת, עשה לו את אותו הדבר שעשיתי ל email.
עובד מצוין – תודה רבה על כל העזרה