ibrahim maher Ответов: 1

Динамическая хранимая процедура Sql


у меня есть динамическая хранимая процедура для выбора из любой таблицы в любой базе данных с помощью
параметр имя базы данных и параметра список полей и параметров в условие WHERE .
при передаче параметра условия where по типу данных int никаких проблем не возникает но при передаче типа данных varchar возвращается ошибка

Что я уже пробовал:

хранимая процедура как поток :

alter PROCEDURE	sp_selectFromTable @TableName [nvarchar](50),
				@FieldsName [nvarchar](500),
				@WhereCri [nvarchar](1000)=null
AS

	DECLARE	@SQL [nvarchar](1000) 
	set @SQL='Select '+ @FieldsName+' from ' + @TableName	+ ' where ' + @WhereCri	
	EXEC sp_executesql @SQL


когда пройдешь черту :
DECLARE	@Where [nvarchar](50)='FirstName=' + 'Nancy'
EXEC sp_selectFromTable 'northwind.dbo.employees','employeeid,FirstName,LastName',@Where 


возвращать ошибку
Недопустимое имя столбца "Nancy".

но когда проходят :
DECLARE	@Where [nvarchar](50)='EmployeeID=1'
EXEC sp_selectFromTable 'northwind.dbo.employees','employeeid,FirstName,LastName',@Where 

в результате появляются настоящие

1 Ответов

Рейтинг:
7

OriginalGriff

Потому что это:

DECLARE	@Where [nvarchar](50)='FirstName=' + 'Nancy'

Создайте строку, содержащую это:
FirstName=Nancy
Который пытается сравнить столбец FirstName с колоннами Nancy
Вам нужно вот что:
FirstName=N'Nancy'

Поэтому ваша декларация должна быть:
DECLARE	@Where [nvarchar](50)='FirstName=N''' + 'Nancy' + '''';


ibrahim maher

спасибо за помощь
в результате появляются настоящие

OriginalGriff

Пожалуйста!