Вы не используете динамический sql правильно - вам нужно объединить запрос в переменную varchar / nvarchar и затем выполнить его.
, например
DECLARE @MyParam INTEGER
SET @MyParam = 1
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'SELECT * FROM SomeTable WHERE SomeField = @MyParam'
EXECUTE sp_executesql @nSQL, N'@MyParam INTEGER', @MyParam
Будьте осторожны с динамическим sql, этот подход, который я рассмотрел, предпочтительнее простого конкатенации @MyParam непосредственно в строку, поскольку это помогает защитить от внедрения SQL.
В вашем случае вам на самом деле не нужно использовать динамический SQL, вы можете сделать:
DECLARE @refKlinik_id INT
SET @refKlinik_id = 24
SELECT H.adi + ' ' + H.soyadi AS Hasta, H.tcKimlikNo, CONVERT(varchar, H.dogumTarihi, 103) AS DogumTarihi, K.kisaAdi AS Klinik, A.acikAdres + A.ilce + A.il AS Adres,
A.tel1, A.gsm, CASE H.hastaKartiVar WHEN 1 THEN 'Hasta Kartı Sahibi' WHEN 0 THEN 'Hasta Kartı Yok' WHEN NULL
THEN 'Hasta Kartı Yok' END AS HastaKartiDurumu
FROM Hastalar AS H INNER JOIN
Klinikler AS K ON K.klinik_id = H.refKlinik_id INNER JOIN
Adresler AS A ON A.refHasta_id = H.hasta_id
WHERE (K.refKlinikGrup_id = 1) AND (H.durumu = 1) AND (@refKlinik_id<=0 OR H.refKlinik_id = @refKlinik_id) AND (A.aktif = 1)
ORDER BY H.adi