话不多说,先贴上代码
DROP PROCEDURE TEST;
CREATE PROCEDURE TEST
@p NVARCHAR(10)
AS
BEGIN
DECLARE @sql NVARCHAR(200)
SET @sql='SELECT * FROM CUSTOMERS WHERE customerid='+@p
PRINT @sql
EXEC (@sql)
END;
DECLARE @p NVARCHAR(20)
SET @p='''FISSA'''
EXEC TEST @p
EXEC TEST '''FISSA'''
如果这样写:EXEC TEST 'FISSA' 则打印出来的SQL 是这样的:SELECT * FROM CUSTOMERS WHERE customerid=FISSA
FISSA应该带着引号,但是没有带上。所以我在调用存储过程传参的时候用转义符单引号将带有带引号的'FISSA'作为参数传进去就好了,但是不知道在系统程序中应该怎么处理这个参数问题,有待再做实验,现在先记录这么多,等会儿再做添加
CREATE PROCEDURE TEST@p NVARCHAR(10)
AS
BEGIN
DECLARE @sql NVARCHAR(200)
SET @sql=N'SELECT * FROM CUSTOMERS WHERE customerid='+@p
PRINT @sql
EXEC SP_EXECUTESQL @sql
END