【发布时间】:2015-05-11 18:25:39
【问题描述】:
我想更新动态生成的表列。
我试过了
ALTER PROCEDURE [dbo].[spname]
@Id INT ,
@Flag varchar(MAX),
@TableName nvarchar(max) ,
AS
BEGIN
IF(@Flag='Process')
BEGIN
DECLARE @squery nvarchar(max) = ''
IF EXISTS(SELECT NAME FROM [DZ_REPO].SYS.TABLES WHERE NAME = @TABLENAME)
BEGIN
set @squery = 'use [DZ_REPO]'
set @squery += 'UPDATE A SET A.cFirstName=B.FN, A.cLastName=B.LN, A.cAddress=B.ADDR, A.cCity=B.CITY, A.cState=B.ST, A.cZIP=B.ZIP,
A.cGender=B.GENDER, A.cAge=B.EXACT_AGE, A.cHouseholdIncomeCode=B.HH_INCOME FROM [dbo].['+@TableName+'] as A, [Consumer].[dbo].[CONSUMERDB] as B
WHERE A.Email=B.Email AND A.AccountId =('+ @Id+')'
print (@squery)
set @squery += 'UPDATE A SET A.cGender=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cGender=B.[Key] AND B.[Column]=N'Gender' AND A.AccountId = ('+@Id+')
UPDATE A SET A.cHouseholdIncome=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cHouseholdIncomeCode=B.[Key] AND B.[Column]=('+HouseholdIncome+') AND A.AccountId = ('+@Id+')
UPDATE A SET A.cPresenceOfChild=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cPresenceOfChild=B.[Key] AND B.[Column]=('+PresenceOfChild+') AND A.AccountId = ('+@Id+')'
END
END
END
但它给出了错误说明
消息 156,级别 15,状态 1,过程 spFileProcess,第 6 行不正确 关键字“AS”附近的语法。消息 102,级别 15,状态 1,程序 spFileProcess,第 26 行“性别”附近的语法不正确。消息 102,级别 15、状态 1、过程 spFileProcess、第 48 行附近的语法不正确 '假'
我编辑
ALTER PROCEDURE [dbo].[spname]
@Id INT = 1 ,
@Flag varchar(MAX) = 'Process',
@TableName nvarchar(max) = 'SONY'
AS
BEGIN
IF(@Flag='Process')
BEGIN
DECLARE @squery nvarchar(max) = ''
print ('call')
IF EXISTS(SELECT NAME FROM [DZ_REPO].SYS.TABLES WHERE NAME = @TABLENAME)
BEGIN
set @squery = 'use [DZ_REPO]'
print (@squery)
set @squery += 'UPDATE A SET A.cFirstName=B.FN, A.cLastName=B.LN, A.cAddress=B.ADDR, A.cCity=B.CITY, A.cState=B.ST, A.cZIP=B.ZIP,
A.cGender=B.GENDER, A.cAge=B.EXACT_AGE, A.cHouseholdIncomeCode=B.HH_INCOME FROM [dbo].['+@TableName+'] as A, [Consumer].[dbo].[CONSUMERDB] as B
WHERE A.Email=B.Email AND A.AccountId =('+ @Id+')'
print (@squery)
set @squery += 'UPDATE A SET A.cGender=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cGender=B.[Key] AND B.[Column]=N'Gender' AND A.AccountId = ('+@Id+')
UPDATE A SET A.cHouseholdIncome=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cHouseholdIncomeCode=B.[Key] AND B.[Column]=('+HouseholdIncome+') AND A.AccountId = ('+@Id+')
UPDATE A SET A.cPresenceOfChild=B.[Value] FROM [dbo].['+@TableName+'] as A, [dbo].[abc] as B WHERE A.cPresenceOfChild=B.[Key] AND B.[Column]=('+PresenceOfChild+') AND A.AccountId = ('+@Id+')'
END
END
END
但是没有一个打印被调用并且错误抛出如下
消息 207,级别 16,状态 1,过程 spFileProcess,第 28 行 列名“性别”无效。 消息 207,级别 16,状态 1,过程 spFileProcess,第 30 行 列名“HouseholdIncome”无效。 消息 207,级别 16,状态 1,过程 spFileProcess,第 32 行 列名“PresenceOfChild”无效。
虽然这个 coumn 已经在 mt 表中了
有什么办法吗?
【问题讨论】:
-
你的错误是什么,请在你的问题中发布
-
Msg 156,级别 15,状态 1,过程 spFileProcess,第 6 行关键字“AS”附近的语法不正确。消息 102,级别 15,状态 1,过程 spFileProcess,第 26 行“性别”附近的语法不正确。消息 102,级别 15,状态 1,过程 spFileProcess,第 48 行 'False' 附近的语法不正确。
-
能否请您显示表 A 和 B 的架构。在我看来,两个表中都不存在必需的列。
标签: sql-server stored-procedures