CREATE PROCEDURE aa
(
@Name NVARCHAR(50)
)
AS
DECLARE @SQL NVARCHAR(3000)SET @SQL='SELECT * FROM A WHERE"
SET @SQL=@SQL+' Name='+@NameEXEC(@SQL)
GO现在有个问题我在SQL调试输入器里调试,输入张三,调试就弹出错误对话框:列名张三无效 输入'张三'能正常显示,用C#调用也是一样的结果,怎么回事啊,我@Name不是已经是字符串了嘛

解决方案 »

  1.   

    CREATE PROCEDURE aa
    (
        @Name NVARCHAR(50)
    )
    AS
    DECLARE @SQL NVARCHAR(3000)SET @SQL='SELECT * FROM A WHERE'
    SET @SQL=@SQL+' Name='''+@Name+''''EXEC(@SQL)
    GO
      

  2.   

    谢谢,但这是为啥呢,我不是已经定义@Name是字符串了嘛
      

  3.   

    拼成sql 语句后就不是字符串啦, 是常量啦
      

  4.   

    --测试表
    If Object_id('T','U') Is Not null
    Drop Table T
    Go
    Create Table T(ID int Identity(1,1) Primary Key,[Name] nvarchar(50))
    Insert Into T
    Select N'张三' Union All
    Select N'李四' 
    Go--存储过程
    If Object_id('aa','P') Is Not null
    Drop Proc aa
    Go
    Create Proc aa
    (
        @Name nvarchar(50)
    )
    AS
    Exec sp_executesql N'Select * From T Where Name=@Name',N'@Name nvarchar(50)',@Name
    --Select * From T Where Name=@Name
    GOExec aa  N'张三'/*
    ID          Name
    ----------- --------------------------------------------------
    1           张三
    */