Wie pass int-parameter in eine dynamische sql-Abfrage
Dies ist meine gespeicherte Prozedur:
ALTER PROCEDURE [dbo].[procViewAdvSearchL1]
-- Add the parameters for the stored procedure here
@keyword nvarchar(800),
@CourtID int = null,
@SYear int = null,
@EYear int = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[viewTextSearchL]'))
DROP VIEW [dbo].[viewTextSearchL]
Declare @sqlquery nvarchar(1500)
Set @sqlquery ='
CREATE VIEW viewTextSearchL
AS
SELECT tblCase.judgement_id AS ID, tblCase.case_number AS Case_No, tblCase.applicant_name AS Aplicant, tblCase.respondent_name AS Respondent, tblCase.case_date AS Case_Date,
tblCourt.court_name AS Court_Name, tblCase.YearOfCase
FROM tblCase INNER JOIN
tblCourt ON tblCase.court_id = tblCourt.court_id INNER JOIN
tblJudgement ON tblCase.judgement_id = tblJudgement.judgement_id
WHERE CONTAINS(tblJudgement.judgement_desc,'+@keyword+') AND (CAST(tblCase.YearOfCase AS int) BETWEEN '+@SYear+' AND '+@EYear+')'
EXECUTE(@sqlquery)
END
Aber dieser Fehler gibt
Msg 137, Ebene 15, Status 2, Prozedur viewTextSearchL, Linie 9
Erklären müssen die Skalare variable "@SYear".
- Wie steht der Parameter auskommentiert sind ...
- Wo sind die
@SYear
und@EYear
Variablen definiert? - Ich hoffe, Sie waschen die Parameter vor dem Aufruf dieser, und nicht unter den keywords parameter, die vom Anwender, oder Sie haben sich Links weit offen für sql-injection-Angriffe.
- Auch ist das erstellen einer Ansicht für das Ergebnis einer Suche, das ist im Grunde eine single-user-Anwendung dann?
- es scheint mir, dass der Parameter nicht Teil des sql-Befehls. Soweit ich bin besorgt, Blick kann nicht die Parameter enthalten, die in Ihrer definition
- Warum auf der Erde Sie schreiben eine Abfrage wie diese?
- In der unbearbeitete Frage alle param Erklärungen folgte ein --
- Nein, haben Sie nicht. In der unbearbeiteten Fragen der code wurde nur nicht eingerückt wie der code es sah so aus, dass Art und Weise.
- sieht aus wie dieses, das es nicht Ihr vollständiger code. Für mich sollte es geben, ein Fehler, aber andere, Fehler bei der Konvertierung von int nvarchar. Haben Sie versucht zu drucken, oder wählen Sie @sqlquery, um zu sehen, was Los ist???
- Ich vermutete, dass ist, wie er tatsächlich ausgeführt wird als nur die Unsichtbarkeit der Parameter verursachen würde
Must declare the scalar variable "@SYear"
- Sie prolly brauchen auch die quote @keyword in den Aufruf ENTHÄLT
- Was sind die Inhalte von @keyword?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle oben sollten Sie die variable deklarieren Sie in NVARCHAR, Da die dynamische Abfrage
Fehler geben ausser es.
Verwenden
exec sp_execute
ausführen der Abfrage außerEXECUTE(@sqlquery)
Für mehr details klicken Sie hier
Basiert auf dem geposteten code kann ich nur sehen, es würde sich ein Fehler bei der Konvertierung von :
Conversion failed when converting the varchar value '' to data type int.
Verwenden Sie die folgenden
und
SELECT 'The year is ' + YEAR(GETDATE())
varchar+int = error
Hier ist die Korrigierte Abfrage