使用SET @sql时如何在SQL字符串中插入值

时间:2015-10-01 15:58:11

标签: sql-server

问题:我想添加" N / A"进入我的@SQL SELECT

查询:我可以添加'知道'值或者我是否需要声明它们并按照tableName添加?

测试:我试过了:

' +' N / A' +' 和 ' +" N / A" +'

注意:如果我删除了N / A行代码,那就可以了。

错误:列名无效' N / A'。

代码:

USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[spExcelIntoTable]    Script Date: 01/10/2015 13:27:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spExcelIntoTable]
(
    @tableName          NVARCHAR(256)     
)
AS
BEGIN

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'SELECT a.ID AS ID,  
a.UPRN,p.BuildingNo,
p.Street,p.Postcode ,
a.ItemRef,a.SurveyDate ,
a.OverallRiskCategory ,
a.SurveyorsComments 

INTO  TEMP_' + @tableName + '

FROM TblAsbestos 

AS a JOIN TblProperty 
As p on a.UPRN = p.UPRN
WHERE a.OverallRiskCategory <> "N/A"
ORDER BY a.OverallRiskCategory'

EXEC (@sql)

END
GO

2 个答案:

答案 0 :(得分:2)

双引号是SQL Server中的对象标识符,您需要使用两个单引号来使用字符串leteral。

目前,sql server将“N / A”视为列名"N/A"

SET @sql = 'SELECT a.ID AS ID,  
a.UPRN,p.BuildingNo,
p.Street,p.Postcode ,
a.ItemRef,a.SurveyDate ,
a.OverallRiskCategory ,
a.SurveyorsComments 

INTO  TEMP_' + @tableName + '

FROM TblAsbestos 

AS a JOIN TblProperty 
As p on a.UPRN = p.UPRN
WHERE a.OverallRiskCategory <> ''N/A''
ORDER BY a.OverallRiskCategory'

答案 1 :(得分:1)

对于动态sql代码,请使用double '

WHERE a.OverallRiskCategory <> ''N/A''